<!DOCTYPE html>





    
        
    

    
        
    

    

    

<html lang="en-us"><head>
    <meta charset="utf-8" />
    <title>模型相关 | RapidOCR Documentation</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="keywords" content="Documentation, Hugo, Hugo Theme, Bootstrap" />
    <meta name="author" content="Colin Wilson - Lotus Labs" />
    <meta name="email" content="support@aigis.uk" />
    <meta name="website" content="https://lotusdocs.dev" />
    <meta name="Version" content="v0.1.0" />
    
    <link rel="icon" href="https://rapidai.github.io/RapidOCRDocs/favicon.ico" sizes="any">
<link rel="icon" type="image/svg+xml" href="https://rapidai.github.io/RapidOCRDocs/favicon.svg">
<link rel="apple-touch-icon" sizes="180x180" href="https://rapidai.github.io/RapidOCRDocs/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://rapidai.github.io/RapidOCRDocs/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="https://rapidai.github.io/RapidOCRDocs/favicon-16x16.png">
<link rel="manifest" crossorigin="use-credentials" href="https://rapidai.github.io/RapidOCRDocs/site.webmanifest">
<meta property="og:title" content="模型相关" />
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://rapidai.github.io/RapidOCRDocs/docs/about_model/" /><meta property="og:image" content="https://rapidai.github.io/RapidOCRDocs/opengraph/card-base-2_hu06b1a92291a380a0d2e0ec03dab66b2f_17642_filter_7592841684826024982.png"/><meta name="twitter:card" content="summary_large_image"/>
<meta name="twitter:image" content="https://rapidai.github.io/RapidOCRDocs/opengraph/card-base-2_hu06b1a92291a380a0d2e0ec03dab66b2f_17642_filter_7592841684826024982.png"/>
<meta name="twitter:title" content="模型相关"/>
<meta name="twitter:description" content=""/>

    
    <script>(()=>{var t=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches,e=localStorage.getItem("theme");t&&e===null&&(localStorage.setItem("theme","dark"),document.documentElement.setAttribute("data-dark-mode","")),t&&e==="dark"&&document.documentElement.setAttribute("data-dark-mode",""),e==="dark"&&document.documentElement.setAttribute("data-dark-mode","")})()</script>
    
    
            
                
                <script type="text/javascript" src="https://rapidai.github.io/RapidOCRDocs/docs/js/flexsearch.bundle.min.249548594cb6843f3060a3cdd3043799676c59ce8db83358a3fc2e4d20598d05dfa6ce4994805d2835cb33b54dc9b9e7.js" integrity="sha384-JJVIWUy2hD8wYKPN0wQ3mWdsWc6NuDNYo/wuTSBZjQXfps5JlIBdKDXLM7VNybnn" crossorigin="anonymous"></script>
                
        
    
    
    
    
        
        
        
        
    
        
        
        
        
    
    
    <link rel="preconnect" href="https://fonts.gstatic.com/" />
    <link rel="preconnect" href="https://fonts.gstatic.com/" crossorigin />
    <link href="https://fonts.googleapis.com/css?family=Inter:300,400,600,700|Fira+Code:500,700&display=block" rel="stylesheet">

    <link rel="stylesheet" href="/RapidOCRDocs/docs/scss/style.min.699bed22b2e9f217570dfb4d0eae55db0646e76af4182bedf0d47ec13b875b45bc29a3a3e3b58712846e6c21cae5ef75.css" integrity="sha384-aZvtIrLp8hdXDftNDq5V2wZG52r0GCvt8NR&#43;wTuHW0W8KaOj47WHEoRubCHK5e91"crossorigin="anonymous">
    
    
    
    <script defer data-domain="rapidai.github.io/rapidocrdocs" data-api='/docs/s/api/event/' src='/docs/s/js/script.outbound-links.js'></script>
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script></head><body>
        <div class="content">
            <div class="page-wrapper toggled">
<nav id="sidebar" class="sidebar-wrapper">
    <div class="sidebar-brand">
        <a href='/RapidOCRDocs/' aria-label="HomePage" alt="HomePage">
            
                <?xml version="1.0" encoding="UTF-8"?><svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 250 250"><path d="m143,39.5c-18,0-18,18-18,18,0,0,0-18-18-18H22c-2.76,0-5,2.24-5,5v143c0,2.76,2.24,5,5,5h76c7.2,0,8.64,11.52,8.93,16.13.07,1.05.95,1.87,2,1.87h32.14c1.06,0,1.94-.82,2-1.87.29-4.61,1.73-16.13,8.93-16.13h76c2.76,0,5-2.24,5-5V44.5c0-2.76-2.24-5-5-5h-85Zm63,123.5c0,1.38-1.12,2.5-2.5,2.5h-60.5c-18,0-18,18-18,18,0,0,0-18-18-18h-60.5c-1.38,0-2.5-1.12-2.5-2.5v-94c0-1.38,1.12-2.5,2.5-2.5h51.5c7.2,0,8.64,11.52,8.93,16.13.07,1.05.95,1.87,2,1.87h32.14c1.06,0,1.94-.82,2-1.87.29-4.61,1.73-16.13,8.93-16.13h51.5c1.38,0,2.5,1.12,2.5,2.5v94Z" style="fill:#06f;"/></svg>
            
        </a>
    </div>
    <div class="sidebar-content" style="height: calc(100% - 131px);">
        <ul class="sidebar-menu">
            
                
                
                    
                        
                        <li class="">
                            <a class="sidebar-root-link" href="https://rapidai.github.io/RapidOCRDocs/docs/overview/">
                                <i class="material-icons me-2">circle</i>
                                
                                概览
                            </a>
                        </li>
                    
                
                    
                        
                        <li class="">
                            <a class="sidebar-root-link" href="https://rapidai.github.io/RapidOCRDocs/docs/business_support/">
                                <i class="material-icons me-2">work</i>
                                
                                商业支持
                            </a>
                        </li>
                    
                
                    
                        
                        <li class="">
                            <a class="sidebar-root-link" href="https://rapidai.github.io/RapidOCRDocs/docs/quickstart/">
                                <i class="material-icons me-2">rocket_launch</i>
                                
                                快速开始
                            </a>
                        </li>
                    
                
                    
                        
                        <li class="">
                            <a class="sidebar-root-link" href="https://rapidai.github.io/RapidOCRDocs/docs/online_demo/">
                                <i class="material-icons me-2">language</i>
                                
                                在线demo
                            </a>
                        </li>
                    
                
                    
                        
                        <li class="">
                            <a class="sidebar-root-link" href="https://rapidai.github.io/RapidOCRDocs/docs/other_programing_lan/">
                                <i class="material-icons me-2">code</i>
                                
                                其他编程语言支持
                            </a>
                        </li>
                    
                
                    
                    
                        <li class="sidebar-dropdown  ">
                            <button class="btn">
                                <i class="material-icons me-2">package</i>
                                安装及使用
                            </button>
                            <div class="sidebar-submenu ">
                                <ul>
                                    
                                        
                                        
                                            <li class="sidebar-dropdown nested  ">
                                                <button class="btn">
                                                    
                                                    [CPU端] rapidocr
                                                </button>
                                                <div class="sidebar-submenu ">
                                                    <ul>
                                                        
                                                            
                                                            
                                                                <li class=" "><a class="sidebar-nested-link" href="https://rapidai.github.io/RapidOCRDocs/docs/install_usage/rapidocr/install/">安装</a></li>
                                                            
                                                        
                                                            
                                                            
                                                                <li class=" "><a class="sidebar-nested-link" href="https://rapidai.github.io/RapidOCRDocs/docs/install_usage/rapidocr/usage/">使用说明</a></li>
                                                            
                                                        
                                                            
                                                            
                                                                <li class=" "><a class="sidebar-nested-link" href="https://rapidai.github.io/RapidOCRDocs/docs/install_usage/rapidocr/cli/">命令行工具</a></li>
                                                            
                                                        
                                                    </ul>
                                                </div>
                                            </li>
                                        
                                    
                                        
                                        
                                            <li class=" "><a class="sidebar-nested-link" href="https://rapidai.github.io/RapidOCRDocs/docs/install_usage/rapidocr_paddle/">[GPU端] rapidocr_paddle</a></li>
                                        
                                    
                                        
                                        
                                            <li class="sidebar-dropdown nested  ">
                                                <button class="btn">
                                                    
                                                    rapidocr_web
                                                </button>
                                                <div class="sidebar-submenu ">
                                                    <ul>
                                                        
                                                            
                                                            
                                                                <li class=" "><a class="sidebar-nested-link" href="https://rapidai.github.io/RapidOCRDocs/docs/install_usage/rapidocr_web/rapidocr_web/">安装及使用</a></li>
                                                            
                                                        
                                                            
                                                            
                                                                <li class=" "><a class="sidebar-nested-link" href="https://rapidai.github.io/RapidOCRDocs/docs/install_usage/rapidocr_web/desktop_usage/">桌面版使用教程</a></li>
                                                            
                                                        
                                                            
                                                            
                                                                <li class=" "><a class="sidebar-nested-link" href="https://rapidai.github.io/RapidOCRDocs/docs/install_usage/rapidocr_web/nuitka_package/">Nuitka打包</a></li>
                                                            
                                                        
                                                            
                                                            
                                                                <li class=" "><a class="sidebar-nested-link" href="https://rapidai.github.io/RapidOCRDocs/docs/install_usage/rapidocr_web/pyinstaller/">PyInstaller打包</a></li>
                                                            
                                                        
                                                            
                                                            
                                                                <li class=" "><a class="sidebar-nested-link" href="https://rapidai.github.io/RapidOCRDocs/docs/install_usage/rapidocr_web/ocrweb_multi/">多语言版本部署使用</a></li>
                                                            
                                                        
                                                    </ul>
                                                </div>
                                            </li>
                                        
                                    
                                        
                                        
                                            <li class=" "><a class="sidebar-nested-link" href="https://rapidai.github.io/RapidOCRDocs/docs/install_usage/rapidocr_api/">rapidocr_api</a></li>
                                        
                                    
                                </ul>
                            </div>
                        </li>
                    
                
                    
                    
                        <li class="sidebar-dropdown  ">
                            <button class="btn">
                                <i class="material-icons me-2">engineering</i>
                                推理引擎相关
                            </button>
                            <div class="sidebar-submenu ">
                                <ul>
                                    
                                        
                                        
                                            <li class="sidebar-dropdown nested  ">
                                                <button class="btn">
                                                    
                                                    ONNXRuntime
                                                </button>
                                                <div class="sidebar-submenu ">
                                                    <ul>
                                                        
                                                            
                                                            
                                                                <li class=" "><a class="sidebar-nested-link" href="https://rapidai.github.io/RapidOCRDocs/docs/inference_engine/onnxruntime/infer_optim/">CPU推理优化</a></li>
                                                            
                                                        
                                                            
                                                            
                                                                <li class=" "><a class="sidebar-nested-link" href="https://rapidai.github.io/RapidOCRDocs/docs/inference_engine/onnxruntime/onnxruntime-gpu/">GPU版推理</a></li>
                                                            
                                                        
                                                    </ul>
                                                </div>
                                            </li>
                                        
                                    
                                        
                                        
                                            <li class="sidebar-dropdown nested  ">
                                                <button class="btn">
                                                    
                                                    OpenVINO
                                                </button>
                                                <div class="sidebar-submenu ">
                                                    <ul>
                                                        
                                                            
                                                            
                                                                <li class=" "><a class="sidebar-nested-link" href="https://rapidai.github.io/RapidOCRDocs/docs/inference_engine/openvino/infer/">CPU推理</a></li>
                                                            
                                                        
                                                            
                                                            
                                                                <li class=" "><a class="sidebar-nested-link" href="https://rapidai.github.io/RapidOCRDocs/docs/inference_engine/openvino/infer-gpu/">GPU推理</a></li>
                                                            
                                                        
                                                    </ul>
                                                </div>
                                            </li>
                                        
                                    
                                </ul>
                            </div>
                        </li>
                    
                
                    
                    
                        <li class="sidebar-dropdown  current active">
                            <button class="btn">
                                <i class="material-icons me-2">model_training</i>
                                模型相关
                            </button>
                            <div class="sidebar-submenu d-block">
                                <ul>
                                    
                                        
                                        
                                            <li class=" "><a class="sidebar-nested-link" href="https://rapidai.github.io/RapidOCRDocs/docs/about_model/model_summary/">不同版本模型之间比较</a></li>
                                        
                                    
                                        
                                        
                                            <li class=" "><a class="sidebar-nested-link" href="https://rapidai.github.io/RapidOCRDocs/docs/about_model/support_language/">支持识别语言</a></li>
                                        
                                    
                                        
                                        
                                            <li class=" "><a class="sidebar-nested-link" href="https://rapidai.github.io/RapidOCRDocs/docs/about_model/convert_model/">转换Paddle模型为ONNX</a></li>
                                        
                                    
                                </ul>
                            </div>
                        </li>
                    
                
                    
                    
                        <li class="sidebar-dropdown  ">
                            <button class="btn">
                                <i class="material-icons me-2">dataset_linked</i>
                                相关项目
                            </button>
                            <div class="sidebar-submenu ">
                                <ul>
                                    
                                        
                                        
                                            <li class=" "><a class="sidebar-nested-link" href="https://rapidai.github.io/RapidOCRDocs/docs/related_projects/derivatives_projects/">衍生项目(偏工程)</a></li>
                                        
                                    
                                        
                                        
                                            <li class=" "><a class="sidebar-nested-link" href="https://rapidai.github.io/RapidOCRDocs/docs/related_projects/related_projects/">垂直项目(偏学术)</a></li>
                                        
                                    
                                </ul>
                            </div>
                        </li>
                    
                
                    
                        
                        <li class="">
                            <a class="sidebar-root-link" href="https://rapidai.github.io/RapidOCRDocs/docs/faq/">
                                <i class="material-icons me-2">quiz</i>
                                
                                常见问题 (FAQ)
                            </a>
                        </li>
                    
                
                    
                    
                        <li class="sidebar-dropdown  ">
                            <button class="btn">
                                <i class="material-icons me-2">article</i>
                                博客
                            </button>
                            <div class="sidebar-submenu ">
                                <ul>
                                    
                                        
                                        
                                            <li class=" "><a class="sidebar-nested-link" href="https://rapidai.github.io/RapidOCRDocs/docs/blog/01_optim_tutorial/">调优尝试教程</a></li>
                                        
                                    
                                        
                                        
                                            <li class=" "><a class="sidebar-nested-link" href="https://rapidai.github.io/RapidOCRDocs/docs/blog/02_config_parameter/">config.yaml参数解释</a></li>
                                        
                                    
                                        
                                        
                                            <li class=" "><a class="sidebar-nested-link" href="https://rapidai.github.io/RapidOCRDocs/docs/blog/03_which_inference/">选择哪个推理引擎？</a></li>
                                        
                                    
                                        
                                        
                                            <li class=" "><a class="sidebar-nested-link" href="https://rapidai.github.io/RapidOCRDocs/docs/blog/04_inference_summary/">推理引擎汇总</a></li>
                                        
                                    
                                        
                                        
                                            <li class=" "><a class="sidebar-nested-link" href="https://rapidai.github.io/RapidOCRDocs/docs/blog/05_rec_dict_onnx/">关于识别模型中字典的读写</a></li>
                                        
                                    
                                        
                                        
                                            <li class=" "><a class="sidebar-nested-link" href="https://rapidai.github.io/RapidOCRDocs/docs/blog/06_custom_different_model/">如何更换其他检测和识别模型？</a></li>
                                        
                                    
                                </ul>
                            </div>
                        </li>
                    
                
                    
                        
                        <li class="">
                            <a class="sidebar-root-link" href="https://rapidai.github.io/RapidOCRDocs/docs/communicate/">
                                <i class="material-icons me-2">chat</i>
                                
                                交流群
                            </a>
                        </li>
                    
                
                    
                        
                        <li class="">
                            <a class="sidebar-root-link" href="https://rapidai.github.io/RapidOCRDocs/docs/sponsor/">
                                <i class="material-icons me-2">cheer</i>
                                
                                给作者加油
                            </a>
                        </li>
                    
                
                    
                    
                        <li class="sidebar-dropdown  ">
                            <button class="btn">
                                <i class="material-icons me-2">update</i>
                                更新日志
                            </button>
                            <div class="sidebar-submenu ">
                                <ul>
                                    
                                        
                                        
                                            <li class=" "><a class="sidebar-nested-link" href="https://rapidai.github.io/RapidOCRDocs/docs/changelog/rapidocr/">rapidocr_onnxruntime/openvino</a></li>
                                        
                                    
                                        
                                        
                                            <li class=" "><a class="sidebar-nested-link" href="https://rapidai.github.io/RapidOCRDocs/docs/changelog/rapidocr_paddle/">rapidocr_paddle</a></li>
                                        
                                    
                                        
                                        
                                            <li class=" "><a class="sidebar-nested-link" href="https://rapidai.github.io/RapidOCRDocs/docs/changelog/rapidocr_web/">rapidocr_web</a></li>
                                        
                                    
                                        
                                        
                                            <li class=" "><a class="sidebar-nested-link" href="https://rapidai.github.io/RapidOCRDocs/docs/changelog/rapidocr_api/">rapidocr_api</a></li>
                                        
                                    
                                </ul>
                            </div>
                        </li>
                    
                
            
        </ul>
        
    </div>
    
        <ul class="sidebar-footer list-unstyled mb-0">
            
        </ul>
    
</nav>

                    <main class="page-content bg-transparent">
                        
<div id="top-header" class="top-header d-print-none">
    <div class="header-bar d-flex justify-content-between">
        <div class="d-flex align-items-center">
            <a href='/RapidOCRDocs/' class="logo-icon me-3" aria-label="HomePage" alt="HomePage">
                <div class="small">
                    
                            <?xml version="1.0" encoding="UTF-8"?><svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 250 250"><path d="m143,39.5c-18,0-18,18-18,18,0,0,0-18-18-18H22c-2.76,0-5,2.24-5,5v143c0,2.76,2.24,5,5,5h76c7.2,0,8.64,11.52,8.93,16.13.07,1.05.95,1.87,2,1.87h32.14c1.06,0,1.94-.82,2-1.87.29-4.61,1.73-16.13,8.93-16.13h76c2.76,0,5-2.24,5-5V44.5c0-2.76-2.24-5-5-5h-85Zm63,123.5c0,1.38-1.12,2.5-2.5,2.5h-60.5c-18,0-18,18-18,18,0,0,0-18-18-18h-60.5c-1.38,0-2.5-1.12-2.5-2.5v-94c0-1.38,1.12-2.5,2.5-2.5h51.5c7.2,0,8.64,11.52,8.93,16.13.07,1.05.95,1.87,2,1.87h32.14c1.06,0,1.94-.82,2-1.87.29-4.61,1.73-16.13,8.93-16.13h51.5c1.38,0,2.5,1.12,2.5,2.5v94Z" style="fill:#06f;"/></svg>
                    
                </div>
                <div class="big">
                    
                            <?xml version="1.0" encoding="UTF-8"?><svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 250 250"><path d="m143,39.5c-18,0-18,18-18,18,0,0,0-18-18-18H22c-2.76,0-5,2.24-5,5v143c0,2.76,2.24,5,5,5h76c7.2,0,8.64,11.52,8.93,16.13.07,1.05.95,1.87,2,1.87h32.14c1.06,0,1.94-.82,2-1.87.29-4.61,1.73-16.13,8.93-16.13h76c2.76,0,5-2.24,5-5V44.5c0-2.76-2.24-5-5-5h-85Zm63,123.5c0,1.38-1.12,2.5-2.5,2.5h-60.5c-18,0-18,18-18,18,0,0,0-18-18-18h-60.5c-1.38,0-2.5-1.12-2.5-2.5v-94c0-1.38,1.12-2.5,2.5-2.5h51.5c7.2,0,8.64,11.52,8.93,16.13.07,1.05.95,1.87,2,1.87h32.14c1.06,0,1.94-.82,2-1.87.29-4.61,1.73-16.13,8.93-16.13h51.5c1.38,0,2.5,1.12,2.5,2.5v94Z" style="fill:#06f;"/></svg>
                    
                </div>
            </a>
            <button id="close-sidebar" class="btn btn-icon btn-soft">
                <span class="material-icons size-20 menu-icon align-middle">menu</span>
            </button>
            
            
                    
                    <button id="flexsearch-button" class="ms-3 btn btn-soft" data-bs-toggle="collapse" data-bs-target="#FlexSearchCollapse" aria-expanded="false" aria-controls="FlexSearchCollapse">
                        <span class="material-icons size-20 menu-icon align-middle">search</span>
                        <span class="flexsearch-button-placeholder ms-1 me-2 d-none d-sm-block">Search</span>
                        <div class="d-none d-sm-block">
                            <span class="flexsearch-button-keys">
                                <kbd class="flexsearch-button-cmd-key">
                                    <svg width="44" height="15"><path d="M2.118,11.5A1.519,1.519,0,0,1,1,11.042,1.583,1.583,0,0,1,1,8.815a1.519,1.519,0,0,1,1.113-.458h.715V6.643H2.118A1.519,1.519,0,0,1,1,6.185,1.519,1.519,0,0,1,.547,5.071,1.519,1.519,0,0,1,1,3.958,1.519,1.519,0,0,1,2.118,3.5a1.519,1.519,0,0,1,1.114.458A1.519,1.519,0,0,1,3.69,5.071v.715H5.4V5.071A1.564,1.564,0,0,1,6.976,3.5,1.564,1.564,0,0,1,8.547,5.071,1.564,1.564,0,0,1,6.976,6.643H6.261V8.357h.715a1.575,1.575,0,0,1,1.113,2.685,1.583,1.583,0,0,1-2.227,0A1.519,1.519,0,0,1,5.4,9.929V9.214H3.69v.715a1.519,1.519,0,0,1-.458,1.113A1.519,1.519,0,0,1,2.118,11.5Zm0-.857a.714.714,0,0,0,.715-.714V9.214H2.118a.715.715,0,1,0,0,1.429Zm4.858,0a.715.715,0,1,0,0-1.429H6.261v.715a.714.714,0,0,0,.715.714ZM3.69,8.357H5.4V6.643H3.69ZM2.118,5.786h.715V5.071a.714.714,0,0,0-.715-.714.715.715,0,0,0-.5,1.22A.686.686,0,0,0,2.118,5.786Zm4.143,0h.715a.715.715,0,0,0,.5-1.22.715.715,0,0,0-1.22.5Z" fill="currentColor"></path><path d="M12.4,11.475H11.344l3.879-7.95h1.056Z" fill="currentColor"></path><path d="M25.073,5.384l-.864.576a2.121,2.121,0,0,0-1.786-.923,2.207,2.207,0,0,0-2.266,2.326,2.206,2.206,0,0,0,2.266,2.325,2.1,2.1,0,0,0,1.782-.918l.84.617a3.108,3.108,0,0,1-2.622,1.293,3.217,3.217,0,0,1-3.349-3.317,3.217,3.217,0,0,1,3.349-3.317A3.046,3.046,0,0,1,25.073,5.384Z" fill="currentColor"></path><path d="M30.993,5.142h-2.07v5.419H27.891V5.142h-2.07V4.164h5.172Z" fill="currentColor"></path><path d="M34.67,4.164c1.471,0,2.266.658,2.266,1.851,0,1.087-.832,1.809-2.134,1.855l2.107,2.691h-1.28L33.591,7.87H33.07v2.691H32.038v-6.4Zm-1.6.969v1.8h1.572c.832,0,1.22-.3,1.22-.918s-.411-.882-1.22-.882Z" fill="currentColor"></path><path d="M42.883,10.561H38.31v-6.4h1.033V9.583h3.54Z" fill="currentColor"></path></svg>
                                </kbd>
                                <kbd class="flexsearch-button-key">
                                    <svg width="15" height="15"><path d="M5.926,12.279H4.41L9.073,2.721H10.59Z" fill="currentColor"/></svg>
                                </kbd>
                            </span>
                        </div>
                    </button>
                
            </div>

        <div class="d-flex align-items-center">
            <ul class="list-unstyled mb-0">
                
                
                    
                    <li class="list-inline-item mb-0">
                        <a href=" https://github.com/RapidAI/RapidOCR " alt="github" rel="noopener noreferrer" target="_blank">
                            <div class="btn btn-icon btn-default border-0">
                                
                                    <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><title>GitHub</title><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg>
                                
                            </div>
                        </a>
                    </li>
                    
                    
                    <li class="list-inline-item mb-0">
                        <a href=" https://twitter.com/_SWHL " alt="twitter" rel="noopener noreferrer" target="_blank">
                            <div class="btn btn-icon btn-default border-0">
                                
                                    <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><title>Twitter / X</title><path d="M.088.768l9.266,12.39L.029,23.231h2.1l8.163-8.819,6.6,8.819h7.142L14.242,10.145,22.921.768h-2.1L13.3,8.891,7.229.768ZM3.174,2.314H6.455L20.942,21.685h-3.28Z" fill="currentColor"/></svg>
                                
                            </div>
                        </a>
                    </li>
                    
                
            </ul>
            <button id="mode" class="btn btn-icon btn-default ms-2" type="button" aria-label="Toggle user interface mode">
                <span class="toggle-dark">
                    <svg xmlns="http://www.w3.org/2000/svg" height="30" width="30" viewBox="0 0 48 48" fill="currentColor">
                        <title>Enable dark mode</title>
                        <path d="M24 42q-7.5 0-12.75-5.25T6 24q0-7.5 5.25-12.75T24 6q.4 0 .85.025.45.025 1.15.075-1.8 1.6-2.8 3.95-1 2.35-1 4.95 0 4.5 3.15 7.65Q28.5 25.8 33 25.8q2.6 0 4.95-.925T41.9 22.3q.05.6.075.975Q42 23.65 42 24q0 7.5-5.25 12.75T24 42Zm0-3q5.45 0 9.5-3.375t5.05-7.925q-1.25.55-2.675.825Q34.45 28.8 33 28.8q-5.75 0-9.775-4.025T19.2 15q0-1.2.25-2.575.25-1.375.9-3.125-4.9 1.35-8.125 5.475Q9 18.9 9 24q0 6.25 4.375 10.625T24 39Zm-.2-14.85Z"/>
                    </svg>
                </span>
                <span class="toggle-light">
                    <svg xmlns="http://www.w3.org/2000/svg" height="30" width="30" viewBox="0 0 48 48" fill="currentColor">
                        <title>Enable light mode</title>
                        <path d="M24 31q2.9 0 4.95-2.05Q31 26.9 31 24q0-2.9-2.05-4.95Q26.9 17 24 17q-2.9 0-4.95 2.05Q17 21.1 17 24q0 2.9 2.05 4.95Q21.1 31 24 31Zm0 3q-4.15 0-7.075-2.925T14 24q0-4.15 2.925-7.075T24 14q4.15 0 7.075 2.925T34 24q0 4.15-2.925 7.075T24 34ZM3.5 25.5q-.65 0-1.075-.425Q2 24.65 2 24q0-.65.425-1.075Q2.85 22.5 3.5 22.5h5q.65 0 1.075.425Q10 23.35 10 24q0 .65-.425 1.075-.425.425-1.075.425Zm36 0q-.65 0-1.075-.425Q38 24.65 38 24q0-.65.425-1.075.425-.425 1.075-.425h5q.65 0 1.075.425Q46 23.35 46 24q0 .65-.425 1.075-.425.425-1.075.425ZM24 10q-.65 0-1.075-.425Q22.5 9.15 22.5 8.5v-5q0-.65.425-1.075Q23.35 2 24 2q.65 0 1.075.425.425.425.425 1.075v5q0 .65-.425 1.075Q24.65 10 24 10Zm0 36q-.65 0-1.075-.425-.425-.425-.425-1.075v-5q0-.65.425-1.075Q23.35 38 24 38q.65 0 1.075.425.425.425.425 1.075v5q0 .65-.425 1.075Q24.65 46 24 46ZM12 14.1l-2.85-2.8q-.45-.45-.425-1.075.025-.625.425-1.075.45-.45 1.075-.45t1.075.45L14.1 12q.4.45.4 1.05 0 .6-.4 1-.4.45-1.025.45-.625 0-1.075-.4Zm24.7 24.75L33.9 36q-.4-.45-.4-1.075t.45-1.025q.4-.45 1-.45t1.05.45l2.85 2.8q.45.45.425 1.075-.025.625-.425 1.075-.45.45-1.075.45t-1.075-.45ZM33.9 14.1q-.45-.45-.45-1.05 0-.6.45-1.05l2.8-2.85q.45-.45 1.075-.425.625.025 1.075.425.45.45.45 1.075t-.45 1.075L36 14.1q-.4.4-1.025.4-.625 0-1.075-.4ZM9.15 38.85q-.45-.45-.45-1.075t.45-1.075L12 33.9q.45-.45 1.05-.45.6 0 1.05.45.45.45.45 1.05 0 .6-.45 1.05l-2.8 2.85q-.45.45-1.075.425-.625-.025-1.075-.425ZM24 24Z"/>
                    </svg>
                </span>
            </button>
            
        </div>
    </div>
    
    
            <div class="collapse" id="FlexSearchCollapse">
                <div class="flexsearch-container">
                    <div class="flexsearch-keymap">
                        <li>
                            <kbd class="flexsearch-button-cmd-key"><svg width="15" height="15" aria-label="Arrow down" role="img"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.2"><path d="M7.5 3.5v8M10.5 8.5l-3 3-3-3"></path></g></svg></kbd>
                            <kbd class="flexsearch-button-cmd-key"><svg width="15" height="15" aria-label="Arrow up" role="img"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.2"><path d="M7.5 11.5v-8M10.5 6.5l-3-3-3 3"></path></g></svg></kbd>
                            <span class="flexsearch-key-label">to navigate</span>
                        </li>
                        <li>
                            <kbd class="flexsearch-button-cmd-key"><svg width="15" height="15" aria-label="Enter key" role="img"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.2"><path d="M12 3.53088v3c0 1-1 2-2 2H4M7 11.53088l-3-3 3-3"></path></g></svg></kbd>
                            <span class="flexsearch-key-label">to select</span>
                        </li>
                        <li>
                            <kbd class="flexsearch-button-cmd-key"><svg width="15" height="15" aria-label="Escape key" role="img"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.2"><path d="M13.6167 8.936c-.1065.3583-.6883.962-1.4875.962-.7993 0-1.653-.9165-1.653-2.1258v-.5678c0-1.2548.7896-2.1016 1.653-2.1016.8634 0 1.3601.4778 1.4875 1.0724M9 6c-.1352-.4735-.7506-.9219-1.46-.8972-.7092.0246-1.344.57-1.344 1.2166s.4198.8812 1.3445.9805C8.465 7.3992 8.968 7.9337 9 8.5c.032.5663-.454 1.398-1.4595 1.398C6.6593 9.898 6 9 5.963 8.4851m-1.4748.5368c-.2635.5941-.8099.876-1.5443.876s-1.7073-.6248-1.7073-2.204v-.4603c0-1.0416.721-2.131 1.7073-2.131.9864 0 1.6425 1.031 1.5443 2.2492h-2.956"></path></g></svg></kbd>
                            <span class="flexsearch-key-label">to close</span>
                        </li>
                    </div>
                    <form class="flexsearch position-relative flex-grow-1 ms-2 me-2">
                        <div class="d-flex flex-row">
                            <input id="flexsearch" class="form-control" type="search" placeholder="Search" aria-label="Search" autocomplete="off">
                            <button id="hideFlexsearch" type="button" class="ms-2 btn btn-soft">
                                cancel
                            </button>
                        </div>
                        <div id="suggestions" class="shadow rounded-1 d-none"></div>
                    </form>
                </div>
            </div>
        
    
    
</div>

                            <div class="container-fluid">
                                <div class="layout-spacing">
                                    
                                        <div class="d-md-flex justify-content-between align-items-center"><nav aria-label="breadcrumb" class="d-inline-block pb-2 mt-1 mt-sm-0">
    <ul id="breadcrumbs" class="breadcrumb bg-transparent mb-0" itemscope itemtype="https://schema.org/BreadcrumbList">
        
            
                <li class="breadcrumb-item text-capitalize active" aria-current="page" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
                    <a itemprop="item" href="/RapidOCRDocs/docs/">
                        <i class="material-icons size-20 align-text-bottom" itemprop="name">Home</i>
                    </a>
                    <meta itemprop="position" content='1' />
                </li>
            
        
            <li class="breadcrumb-item text-capitalize active" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
                <span itemprop="name">模型相关</span>
                <meta itemprop="position" content='2' />
            </li>
        
    </ul>
</nav></div>
                                    
                                    <div class="row flex-xl-nowrap">
                                        
                                        <div class="docs-toc col-xl-3 visually-hidden visually-hidden  d-xl-block"><toc>
    <div class="fw-bold text-uppercase mb-2">On this page</div>
    <nav id="toc"></nav>
    </toc></div>
                                        
                                        
                                        <div class="docs-toc-mobile visually-hidden visually-hidden  d-print-none d-xl-none">
                                            <button id="toc-dropdown-btn" class="btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" data-bs-offset="0,0" aria-expanded="false">
                                                Table of Contents
                                            </button>
<nav id="toc-mobile"></nav></div>
                                        <div class="docs-content col-12  mt-0">
                                            <div class="mb-0 d-flex">
                                                
                                                <h1 class="content-title mb-0">
                                                    模型相关
                                                    
                                                </h1>
                                            </div>
                                            
                                                <p class="lead mb-3"></p>
                                            
                                            <div id="content" class="main-content" data-bs-spy="scroll" data-bs-root-margin="0px 0px -65%" data-bs-target="#toc-mobile">
                                                
    <div class="row flex-xl-wrap">
        
        <div id="list-item" class="col-md-4 col-12 mt-4 pt-2">
            <a class="text-decoration-none text-reset" href="https://rapidai.github.io/RapidOCRDocs/docs/about_model/model_summary/">
                <div class="card h-100 features feature-full-bg rounded p-4 position-relative overflow-hidden border-1">
                    <span class="icon-color d-flex my-3">
                        <i class="material-icons align-middle">model_training</i>
                        
                        
                    </span>
                    <div class="card-body p-0 content">
                        <p class="fs-5 fw-semibold card-title mb-1">不同版本模型之间比较</p>
                        <p class="para card-text mb-0"></p>
                    </div>
                    
                </div>
            </a>
        </div>
        
        <div id="list-item" class="col-md-4 col-12 mt-4 pt-2">
            <a class="text-decoration-none text-reset" href="https://rapidai.github.io/RapidOCRDocs/docs/about_model/support_language/">
                <div class="card h-100 features feature-full-bg rounded p-4 position-relative overflow-hidden border-1">
                    <span class="icon-color d-flex my-3">
                        <i class="material-icons align-middle">support</i>
                        
                        
                    </span>
                    <div class="card-body p-0 content">
                        <p class="fs-5 fw-semibold card-title mb-1">支持识别语言</p>
                        <p class="para card-text mb-0"></p>
                    </div>
                    
                </div>
            </a>
        </div>
        
        <div id="list-item" class="col-md-4 col-12 mt-4 pt-2">
            <a class="text-decoration-none text-reset" href="https://rapidai.github.io/RapidOCRDocs/docs/about_model/convert_model/">
                <div class="card h-100 features feature-full-bg rounded p-4 position-relative overflow-hidden border-1">
                    <span class="icon-color d-flex my-3">
                        <i class="material-icons align-middle">support</i>
                        
                        
                    </span>
                    <div class="card-body p-0 content">
                        <p class="fs-5 fw-semibold card-title mb-1">转换Paddle模型为ONNX</p>
                        <p class="para card-text mb-0"></p>
                    </div>
                    
                </div>
            </a>
        </div>
        
    </div>

                                            </div>
                                            <div><hr class="doc-hr">
<div id="doc-nav" class="d-print-none">
</div></div>
                                        </div>
                                    </div>
                                </div>
                            </div>
<footer class="shadow py-3 d-print-none">
    <div class="container-fluid">
        <div class="row align-items-center">
            <div class="col">
                <div class="text-sm-start text-center mx-md-2">
                    <p class="mb-0">
                        
                        © 2024 SWHL. Built with <a href="https://github.com/colinwilson/lotusdocs"><strong>Lotus Docs</strong></a>
                    </p>
                </div>
            </div>
        </div>
    </div>
</footer>
</main>
            </div>
        </div>

        
        
        <button onclick="topFunction()" id="back-to-top" aria-label="Back to Top Button" class="back-to-top fs-5"><svg width="24" height="24"><path d="M12,10.224l-6.3,6.3L4.32,15.152,12,7.472l7.68,7.68L18.3,16.528Z" style="fill:#fff"/></svg></button>
        
        

        
        
            <script>(()=>{var e=document.getElementById("mode");e!==null&&(window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",e=>{e.matches?(localStorage.setItem("theme","dark"),document.documentElement.setAttribute("data-dark-mode","")):(localStorage.setItem("theme","light"),document.documentElement.removeAttribute("data-dark-mode"))}),e.addEventListener("click",()=>{document.documentElement.toggleAttribute("data-dark-mode"),localStorage.setItem("theme",document.documentElement.hasAttribute("data-dark-mode")?"dark":"light")}),localStorage.getItem("theme")==="dark"?document.documentElement.setAttribute("data-dark-mode",""):document.documentElement.removeAttribute("data-dark-mode"))})()</script>
        




    
        
        
    
    






    

    <script src="/RapidOCRDocs/docs/js/bootstrap.62f66a246944c6008b07a852a45195f58bef9a847482b10d5916828839dcb18678cf99006f7c5dcd5cb72f95a1eb41a1.js" integrity="sha384-YvZqJGlExgCLB6hSpFGV9YvvmoR0grENWRaCiDncsYZ4z5kAb3xdzVy3L5Wh60Gh"defer></script>


    <script type="text/javascript" src="https://rapidai.github.io/RapidOCRDocs/docs/js/bundle.min.0428ce626d92832cdec81d182ad107961ae43d1be42f827136e34e86f7af53881bdaeba3e3612d374118397abdd6288c.js" integrity="sha384-BCjOYm2SgyzeyB0YKtEHlhrkPRvkL4JxNuNOhvevU4gb2uuj42EtN0EYOXq91iiM" crossorigin="anonymous" defer></script>
        

        
        <script type="module">
    var suggestions = document.getElementById('suggestions');
    var search = document.getElementById('flexsearch');

    const flexsearchContainer = document.getElementById('FlexSearchCollapse');

    const hideFlexsearchBtn = document.getElementById('hideFlexsearch');

    const configObject = { toggle: false }
    const flexsearchContainerCollapse = new Collapse(flexsearchContainer, configObject) 

    if (search !== null) {
        document.addEventListener('keydown', inputFocus);
        flexsearchContainer.addEventListener('shown.bs.collapse', function () {
            search.focus();
        });
        
        var topHeader = document.getElementById("top-header");
        document.addEventListener('click', function(elem) {
            if (!flexsearchContainer.contains(elem.target) && !topHeader.contains(elem.target))
                flexsearchContainerCollapse.hide();
        });
    }

    hideFlexsearchBtn.addEventListener('click', () =>{
        flexsearchContainerCollapse.hide()
    })

    function inputFocus(e) {
        if (e.ctrlKey && e.key === '/') {
            e.preventDefault();
            flexsearchContainerCollapse.toggle();
        }
        if (e.key === 'Escape' ) {
            search.blur();
            
            flexsearchContainerCollapse.hide();
        }
    };

    document.addEventListener('click', function(event) {

    var isClickInsideElement = suggestions.contains(event.target);

    if (!isClickInsideElement) {
        suggestions.classList.add('d-none');
    }

    });

    


    document.addEventListener('keydown',suggestionFocus);

    function suggestionFocus(e) {
    const suggestionsHidden = suggestions.classList.contains('d-none');
    if (suggestionsHidden) return;

    const focusableSuggestions= [...suggestions.querySelectorAll('a')];
    if (focusableSuggestions.length === 0) return;

    const index = focusableSuggestions.indexOf(document.activeElement);

    if (e.key === "ArrowUp") {
        e.preventDefault();
        const nextIndex = index > 0 ? index - 1 : 0;
        focusableSuggestions[nextIndex].focus();
    }
    else if (e.key === "ArrowDown") {
        e.preventDefault();
        const nextIndex= index + 1 < focusableSuggestions.length ? index + 1 : index;
        focusableSuggestions[nextIndex].focus();
    }

    }

    


    (function(){

    var index = new FlexSearch.Document({
        
        tokenize: "full",
        minlength:  1 ,
        cache:  100 ,
        optimize:  true ,
        document: {
        id: 'id',
        store: [
            "href", "title", "description"
        ],
        index: ["title", "description", "content"]
        }
    });


    


    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    


    

    

    index.add(
            {
                id:  0 ,
                href: "\/RapidOCRDocs\/docs\/",
                title: "Documentation",
                description: "",
                content: ""
            }
        );
    index.add(
            {
                id:  1 ,
                href: "\/RapidOCRDocs\/docs\/overview\/",
                title: "概览",
                description: " 信创级开源OCR - 为世界内容安全贡献力量 简介 link 💖目前已知运行速度最快、支持最广，完全开源免费并支持离线快速部署的多平台多语言OCR。 支持的语言: 默认是中英文，其他语言识别需要自助转换。具体参考这里 缘起：PaddleOCR工程化不是太好，为了方便大家在各种端上进行OCR推理，我们将PaddleOCR中的模型转换为ONNX格式，使用Python/C++/Java/C# 将它移植到各个平台。 名称来源： 轻快好省并智能。基于深度学习的OCR技术，主打人工智能优势及小模型，以速度为使命，效果为主导。 使用： 如果仓库下已有模型满足要求 → RapidOCR部署使用即可。 不满足要求 → 基于PaddleOCR在自己数据上微调 → RapidOCR部署。 如果该仓库有帮助到你，还请点个小星星⭐呗！ 整体框架 linkflowchart LR subgraph Step direction TB C(Text Det) --\u003e D(Text Cls) --\u003e E(Text Rec) end A[/OurSelf Dataset/] --\u003e B(PaddleOCR) --Train--\u003e Step --\u003e F(PaddleOCRModelConverter) F --ONNX--\u003e G{RapidOCR Deploy\\nPython/C++/Java/C#} G --\u003e H(Windows x86/x64) \u0026 I(Linux) \u0026 J(Android) \u0026 K(Web) \u0026 L(Raspberry Pi) click B \"https://github.com/PaddlePaddle/PaddleOCR\" _blank click F \"https://github.",
                content: " 信创级开源OCR - 为世界内容安全贡献力量 简介 link 💖目前已知运行速度最快、支持最广，完全开源免费并支持离线快速部署的多平台多语言OCR。 支持的语言: 默认是中英文，其他语言识别需要自助转换。具体参考这里 缘起：PaddleOCR工程化不是太好，为了方便大家在各种端上进行OCR推理，我们将PaddleOCR中的模型转换为ONNX格式，使用Python/C++/Java/C# 将它移植到各个平台。 名称来源： 轻快好省并智能。基于深度学习的OCR技术，主打人工智能优势及小模型，以速度为使命，效果为主导。 使用： 如果仓库下已有模型满足要求 → RapidOCR部署使用即可。 不满足要求 → 基于PaddleOCR在自己数据上微调 → RapidOCR部署。 如果该仓库有帮助到你，还请点个小星星⭐呗！ 整体框架 linkflowchart LR subgraph Step direction TB C(Text Det) --\u003e D(Text Cls) --\u003e E(Text Rec) end A[/OurSelf Dataset/] --\u003e B(PaddleOCR) --Train--\u003e Step --\u003e F(PaddleOCRModelConverter) F --ONNX--\u003e G{RapidOCR Deploy\\nPython/C++/Java/C#} G --\u003e H(Windows x86/x64) \u0026 I(Linux) \u0026 J(Android) \u0026 K(Web) \u0026 L(Raspberry Pi) click B \"https://github.com/PaddlePaddle/PaddleOCR\" _blank click F \"https://github.com/RapidAI/PaddleOCRModelConverter\" _blank 相关产品概览图 link info 下图表格中，除测评集部分托管在魔搭社区下，其余均在Github下，详细介绍如下：第一行是功能介绍第二行是对应的仓库名称，可直接去Github搜索该名称即可。\n"
            }
        );
    index.add(
            {
                id:  2 ,
                href: "\/RapidOCRDocs\/docs\/business_support\/",
                title: "商业支持",
                description: "服务一：AI相关问题咨询 link 加入知识星球RapidAI私享群，目前星球已有C++/Rust/Go/Python以及AI大佬加入。 这里的提问会优先得到详尽回答和支持，也会享受到RapidAI组织后续持续优质的服务。 欢迎加入。 服务二：信创CPU支持 link 提供信创平台多架构，包括Arm/X86/mips(龙芯)/RISC-V等信创CPU支持，同时兼容ONNXRuntime/OpenVINO/NCNN。 有意者邮件联系: znsoft@163.com, 请先邮件咨询服务项目，即时回复联系方式。 服务三：国产操作系统OCR Docker部署 link 提供国产操作系统（海光、中科方德、麒麟等等）OCR Docker部署服务。 有意者 → ✉ liekkaskono@163.com。 ",
                content: "服务一：AI相关问题咨询 link 加入知识星球RapidAI私享群，目前星球已有C++/Rust/Go/Python以及AI大佬加入。 这里的提问会优先得到详尽回答和支持，也会享受到RapidAI组织后续持续优质的服务。 欢迎加入。 服务二：信创CPU支持 link 提供信创平台多架构，包括Arm/X86/mips(龙芯)/RISC-V等信创CPU支持，同时兼容ONNXRuntime/OpenVINO/NCNN。 有意者邮件联系: znsoft@163.com, 请先邮件咨询服务项目，即时回复联系方式。 服务三：国产操作系统OCR Docker部署 link 提供国产操作系统（海光、中科方德、麒麟等等）OCR Docker部署服务。 有意者 → ✉ liekkaskono@163.com。 "
            }
        );
    index.add(
            {
                id:  3 ,
                href: "\/RapidOCRDocs\/docs\/quickstart\/",
                title: "快速开始",
                description: "故事的开始，只需3步。",
                content: "1. 安装 link pip install rapidocr_onnxruntime 2. 使用 link 终端使用 Python使用 rapidocr_onnxruntime -img tests/test_files/ch_en_num.jpg from rapidocr_onnxruntime import RapidOCR engine = RapidOCR() img_path = 'tests/test_files/ch_en_num.jpg' result, elapse = engine(img_path) print(result) 3. 查看效果 link [ [[[9.0, 2.0], [321.0, 11.0], [318.0, 102.0], [6.0, 93.0]], '正品促销', '0.7986101984977723'], [[[70.0, 98.0], [251.0, 98.0], [251.0, 125.0], [70.0, 125.0]], '大桶装更划算', '0.7368737288883754'], [[[69.0, 144.0], [255.0, 144.0], [255.0, 164.0], [69.0, 164.0]], '强力去污符合国标', '0.8172478278477987'], [[[107.0, 170.0], [219.0, 170.0], [219.0, 182.0], [107.0, 182.0]], '-40深度防冻不结冰', '0.8655969283797524'], [[[35.0, 227.0], [63.0, 227.0], [63.0, 236.0], [35.0, 236.0]], '日常价?', '0.6502826035022735'], [[[141.0, 223.0], [187.0, 225.0], [185.0, 249.0], [139.0, 247.0]], '直击', '0.596031109491984'], [[[34.0, 234.0], [81.0, 236.0], [80.0, 254.0], [33.0, 252.0]], '10.0起', '0.8231529593467712'], [[[257.0, 234.0], [304.0, 236.0], [303.0, 253.0], [256.0, 251.0]], '10.0起', '0.8304102122783661'], [[[258.0, 227.0], [287.0, 226.0], [287.0, 236.0], [258.0, 237.0]], '日常价?', '0.5725070595741272'], [[[140.0, 245.0], [186.0, 246.0], [186.0, 272.0], [139.0, 271.0]], '底价', '0.5142453710238138'], [[[129.0, 290.0], [207.0, 292.0], [206.0, 339.0], [128.0, 337.0]], '5.8', '0.6341951936483383'], [[[98.0, 320.0], [129.0, 320.0], [129.0, 331.0], [98.0, 331.0]], '券后价?', '0.6209247708320618'], [[[114.0, 343.0], [210.0, 343.0], [210.0, 355.0], [114.0, 355.0]], '惊喜福利不容错过', '0.8640043867958916'], [[[69.0, 363.0], [151.0, 363.0], [151.0, 383.0], [69.0, 383.0]], '极速发货', '0.7552512288093567'], [[[201.0, 363.0], [285.0, 363.0], [285.0, 383.0], [201.0, 383.0]], '冰点标准', '0.7194759607315063'], [[[68.0, 392.0], [151.0, 392.0], [151.0, 412.0], [68.0, 412.0]], '破损就赔', '0.7711991906166077'], [[[202.0, 391.0], [285.0, 391.0], [285.0, 413.0], [202.0, 413.0]], '假一赔十', '0.6546663284301758'] ] "
            }
        );
    index.add(
            {
                id:  4 ,
                href: "\/RapidOCRDocs\/docs\/online_demo\/",
                title: "在线demo",
                description: " 简介 link Hugging Face上的Demo和魔搭Demo是同一套代码，都是基于streamlit搭建而来的。 两者区别在于，魔搭是国内平台，不需要科学上网即可访问使用；Hugging Face则需要科学上网。 搭建demo的目的在于： 快速查看指定图像的识别效果和识别时长 快速比较不同版本的检测和识别模型效果差异 Demo源码 link Hugging Face Demo: https://huggingface.co/spaces/SWHL/RapidOCRDemo/tree/main 魔搭社区: https://www.modelscope.cn/studios/liekkas/RapidOCRDemo/files 在线Demo link Hugging Face Demo: https://huggingface.co/spaces/SWHL/RapidOCRDemo 魔搭社区: https://www.modelscope.cn/studios/liekkas/RapidOCRDemo/summary ",
                content: " 简介 link Hugging Face上的Demo和魔搭Demo是同一套代码，都是基于streamlit搭建而来的。 两者区别在于，魔搭是国内平台，不需要科学上网即可访问使用；Hugging Face则需要科学上网。 搭建demo的目的在于： 快速查看指定图像的识别效果和识别时长 快速比较不同版本的检测和识别模型效果差异 Demo源码 link Hugging Face Demo: https://huggingface.co/spaces/SWHL/RapidOCRDemo/tree/main 魔搭社区: https://www.modelscope.cn/studios/liekkas/RapidOCRDemo/files 在线Demo link Hugging Face Demo: https://huggingface.co/spaces/SWHL/RapidOCRDemo 魔搭社区: https://www.modelscope.cn/studios/liekkas/RapidOCRDemo/summary "
            }
        );
    index.add(
            {
                id:  5 ,
                href: "\/RapidOCRDocs\/docs\/other_programing_lan\/",
                title: "其他编程语言支持",
                description: " warning 以下项目不确定是否支持最新的推理代码，Python版为最新的。 C++范例(Windows/Linux/macOS) link RapidOcrOnnx RapidOcrNcnn JVM范例(Java/Kotlin) link 🔥RapidOcr-Java RapidOcrOnnxJvm RapidOcrNcnnJvm .Net范例(C#) linkAndroid范例 link易语言 link",
                content: " warning 以下项目不确定是否支持最新的推理代码，Python版为最新的。 C++范例(Windows/Linux/macOS) link RapidOcrOnnx RapidOcrNcnn JVM范例(Java/Kotlin) link 🔥RapidOcr-Java RapidOcrOnnxJvm RapidOcrNcnnJvm .Net范例(C#) linkAndroid范例 link易语言 link"
            }
        );
    index.add(
            {
                id:  6 ,
                href: "\/RapidOCRDocs\/docs\/install_usage\/",
                title: "安装及使用",
                description: "",
                content: ""
            }
        );
    index.add(
            {
                id:  7 ,
                href: "\/RapidOCRDocs\/docs\/install_usage\/rapidocr\/",
                title: "[CPU端] rapidocr",
                description: "rapidocr",
                content: ""
            }
        );
    index.add(
            {
                id:  8 ,
                href: "\/RapidOCRDocs\/docs\/install_usage\/rapidocr_paddle\/",
                title: "[GPU端] rapidocr_paddle",
                description: "简介 linkrapidocr_paddle系列包是基于PaddlePaddle框架作为推理引擎的，支持CPU和GPU上推理。值得说明的是，这个包和PaddleOCR相比，代码基本都是一样的，只不过这个库将里面核心推理代码抽了出来，更加精简而已。\n推荐GPU上用这个，CPU端还是以rapidocr_onnxruntime和rapidocr_openvino为主。毕竟PaddlePaddle的CPU端还是比较重的。\n封装这个包的原因是为了弥补GPU端推理的空缺。因为面对成千上万的图像需要提取文字时，CPU端上推理速度还是较慢，不能满足需求。\n安装 link 根据自己需求，先安装PaddlePaddle框架（CPU/GPU），并验证，参见: 官方教程，注意验证是否安装成功： import paddle print(paddle.utils.run_check()) # 如果出现PaddlePaddle is installed successfully!，说明您已成功安装。 安装rapidocr_paddle pip install rapidocr_paddle 使用 link CPU端推理 GPU端推理 前提是安装了CPU版的PaddlePaddle\nimport cv2 from rapidocr_paddle import RapidOCR engine = RapidOCR() image_path = \"tests/test_files/ch_en_num.jpg\" result, elapse_list = engine(image_path) print(result) print(elapse_list) 前提是安装了GPU版的PaddlePaddle，注意在实例化RapidOCR类时，需要通过参数显式指定使用GPU。\nimport cv2 from rapidocr_paddle import RapidOCR # 注意这里的参数 engine = RapidOCR(det_use_cuda=True, cls_use_cuda=True, rec_use_cuda=True) image_path = \"tests/test_files/ch_en_num.jpg\" result, elapse_list = engine(image_path) 其他使用详情，同rapidocor_onnxruntime系列，参见: link\n推理速度比较 link 相关测评代码，参见AI Studio，Fork可直接运行查看。不要只推理一张来推理速度，推理第一张时，需要预热。",
                content: " 简介 linkrapidocr_paddle系列包是基于PaddlePaddle框架作为推理引擎的，支持CPU和GPU上推理。值得说明的是，这个包和PaddleOCR相比，代码基本都是一样的，只不过这个库将里面核心推理代码抽了出来，更加精简而已。\n推荐GPU上用这个，CPU端还是以rapidocr_onnxruntime和rapidocr_openvino为主。毕竟PaddlePaddle的CPU端还是比较重的。\n封装这个包的原因是为了弥补GPU端推理的空缺。因为面对成千上万的图像需要提取文字时，CPU端上推理速度还是较慢，不能满足需求。\n安装 link 根据自己需求，先安装PaddlePaddle框架（CPU/GPU），并验证，参见: 官方教程，注意验证是否安装成功： import paddle print(paddle.utils.run_check()) # 如果出现PaddlePaddle is installed successfully!，说明您已成功安装。 安装rapidocr_paddle pip install rapidocr_paddle 使用 link CPU端推理 GPU端推理 前提是安装了CPU版的PaddlePaddle\nimport cv2 from rapidocr_paddle import RapidOCR engine = RapidOCR() image_path = \"tests/test_files/ch_en_num.jpg\" result, elapse_list = engine(image_path) print(result) print(elapse_list) 前提是安装了GPU版的PaddlePaddle，注意在实例化RapidOCR类时，需要通过参数显式指定使用GPU。\nimport cv2 from rapidocr_paddle import RapidOCR # 注意这里的参数 engine = RapidOCR(det_use_cuda=True, cls_use_cuda=True, rec_use_cuda=True) image_path = \"tests/test_files/ch_en_num.jpg\" result, elapse_list = engine(image_path) 其他使用详情，同rapidocor_onnxruntime系列，参见: "
            }
        );
    index.add(
            {
                id:  9 ,
                href: "\/RapidOCRDocs\/docs\/install_usage\/rapidocr\/install\/",
                title: "安装",
                description: " 简介 linkrapidocr_onnxruntime和rapidocr_openvino两个包除推理引擎不同之外，其余均相同。后续说明文档均以rapidocr_onnxruntime为例 如使用rapidocr_openvino，直接更换关键词rapidocr_onnxruntime为rapidocr_openvino即可。 两者均是在CPU上推理的，如想在GPU上推理，可以参考rapidocr_paddle版。 版本情况 link各个库的最新版本： 库 pypi最新版本 rapidocr_onnxruntime rapidocr_openvino rapidocr_paddle pypi上各个版本的对应关系： 版本 内置模型版本 对应PaddleOCR 分支 v1.3.x PaddleOCR v4版 release/2.7 v1.2.xv1.1.xv1.0.x PaddleOCR v3版 release/2.6 安装 link顺利的话，一行命令即可。包大小约为14M左右，包含了三个模型。因为mobile版模型较小，因此将相关模型都已打到Whl包，可直接pip安装使用。 notifications 请使用Python3.6及以上版本。 rapidocr系列库目前仅在CPU上支持较好，GPU上推理很慢，这一点可参考link。因此不建议用onnxruntime-gpu版推理。推荐用rapidocr_paddle pip install rapidocr-onnxruntime 安装速度慢的话，可以指定国内的安装源，如使用清华源： pip install rapidocr_onnxruntime -i https://pypi.tuna.tsinghua.edu.cn/simple/ 依赖的包如下： info 如果在安装过程中，出现某个依赖包不能正确安装时，可先单独安装某个依赖包，之后再安装rapidocr_onnxruntime即可。 pyclipper\u003e=1.2.1 onnxruntime\u003e=1.7.0 opencv_python\u003e=4.5.1.48 numpy\u003e=1.19.3 six\u003e=1.15.0 Shapely\u003e=1.7.1 PyYAML Pillow ",
                content: " 简介 linkrapidocr_onnxruntime和rapidocr_openvino两个包除推理引擎不同之外，其余均相同。后续说明文档均以rapidocr_onnxruntime为例\n如使用rapidocr_openvino，直接更换关键词rapidocr_onnxruntime为rapidocr_openvino即可。\n两者均是在CPU上推理的，如想在GPU上推理，可以参考"
            }
        );
    index.add(
            {
                id:  10 ,
                href: "\/RapidOCRDocs\/docs\/install_usage\/rapidocr\/usage\/",
                title: "使用说明",
                description: "初始化 link类RapidOCR是主类，其初始化函数如下：\nclass RapidOCR: def __init__(self, config_path: Optional[str] = None, **kwargs): pass 支持两种自定义传参数的方案，下面分别详细说明：\n以config.yaml方式\n找到rapidocr_onnxruntime安装目录下的config.yaml文件，可以通过pip show rapidocr_onnxruntime找到其安装路径。 将config.yaml拷贝出来，放到当前运行目录下 按需自定义参数修改即可，具体参数解释，参见config.yaml engine = RapidOCR(config_path=\"your.yaml\") (推荐) 以具体参数传入，参数基本和config.yaml中对应，只是个别名称有所区别。\ninfo 以下参数均有默认值，可以不传入任何参数，直接初始化使用即可。 class RapidOCR: def __init__( self, text_score: float = 0.5, print_verbose: bool = False, min_height: int = 30, width_height_ratio: float = 8, det_use_cuda: bool = False, det_model_path: Optional[str] = None, det_limit_side_len: float = 736, det_limit_type: str = \"min\", det_thresh: float = 0.3, det_box_thresh: float = 0.",
                content: "初始化 link类RapidOCR是主类，其初始化函数如下：\nclass RapidOCR: def __init__(self, config_path: Optional[str] = None, **kwargs): pass 支持两种自定义传参数的方案，下面分别详细说明：\n以config.yaml方式\n找到rapidocr_onnxruntime安装目录下的config.yaml文件，可以通过pip show rapidocr_onnxruntime找到其安装路径。 将config.yaml拷贝出来，放到当前运行目录下 按需自定义参数修改即可，具体参数解释，参见config.yaml engine = RapidOCR(config_path=\"your.yaml\") (推荐) 以具体参数传入，参数基本和config.yaml中对应，只是个别名称有所区别。\ninfo 以下参数均有默认值，可以不传入任何参数，直接初始化使用即可。 class RapidOCR: def __init__( self, text_score: float = 0.5, print_verbose: bool = False, min_height: int = 30, width_height_ratio: float = 8, det_use_cuda: bool = False, det_model_path: Optional[str] = None, det_limit_side_len: float = 736, det_limit_type: str = \"min\", det_thresh: float = 0.3, det_box_thresh: float = 0.5, det_unclip_ratio: float = 1.6, det_donot_use_dilation: bool = False, det_score_mode: str = \"fast\", cls_use_cuda: bool = False, cls_model_path: Optional[str] = None, cls_image_shape: List[int] = [3, 48, 192], cls_label_list: List[str] = [\"0\", \"180\"], cls_batch_num: int = 6, cls_thresh: float = 0.9, rec_use_cuda: bool = False, rec_model_path: Optional[str] = None, rec_img_shape: List[int] = [3, 48, 320], rec_batch_num: int = 6, ): pass engine = RapidOCR() res, elapse = engine(img, use_det=True, use_cls=True, use_rec=True) 输入 link支持4种输入类型：Union[str, np.ndarray, bytes, Path]\nstr np.ndarray Bytes Path from rapidocr_onnxruntime import RapidOCR engine = RapidOCR() img_path = 'tests/test_files/ch_en_num.jpg' result, elapse = engine(img_path) print(result) print(elapse) import cv2 from rapidocr_onnxruntime import RapidOCR engine = RapidOCR() img = cv2.imread('tests/test_files/ch_en_num.jpg') result, elapse = engine(img) print(result) print(elapse) from rapidocr_onnxruntime import RapidOCR engine = RapidOCR() img_path = 'tests/test_files/ch_en_num.jpg' with open(img_path, 'rb') as f: img = f.read() result, elapse = engine(img) print(result) print(elapse) from pathlib import Path from rapidocr_onnxruntime import RapidOCR engine = RapidOCR() img_path = Path('tests/test_files/ch_en_num.jpg') result, elapse = engine(img_path) print(result) print(elapse) 输出 link类RapidOCR在调用时，有三个参数use_det | use_cls | use_rec，可以控制是否使用检测、方向分类和识别这三部分。不同的参数，决定了不同的输出，详细搭配如下：\n只有检测 只有分类 只有识别 检测 + 识别 分类 + 识别 检测 + 分类 + 识别 from rapidocr_onnxruntime import RapidOCR engine = RapidOCR() img_path = 'tests/test_files/ch_en_num.jpg' result, elapse = engine(img_path, use_det=True, use_cls=False, use_rec=False) print(result) print(elapse) 返回值result: List[List[float]] (每个框的坐标[左上, 右上, 右下, 左下])\n[ [[5.0, 2.0], [322.0, 9.0], [319.0, 103.0], [3.0, 96.0]], [[70.0, 98.0], [252.0, 97.0], [252.0, 125.0], [70.0, 126.0]], ... ] from rapidocr_onnxruntime import RapidOCR engine = RapidOCR() img_path = 'tests/test_files/ch_en_num.jpg' result, elapse = engine(img_path, use_det=False, use_cls=True, use_rec=False) print(result) print(elapse) 返回值result: List[List[str, float]] ([方向0或180, 置信度])\n[ ['0', 0.9998784], ... ] from rapidocr_onnxruntime import RapidOCR engine = RapidOCR() img_path = 'tests/test_files/ch_en_num.jpg' result, elapse = engine(img_path, use_det=False, use_cls=False, use_rec=True) print(result) print(elapse) 返回值result: List[List[str, float]] ([识别的文本, 置信度])\n[ ['韩国小馆', 0.7992169380187988], ... ] from rapidocr_onnxruntime import RapidOCR engine = RapidOCR() img_path = 'tests/test_files/ch_en_num.jpg' result, elapse = engine(img_path, use_det=True, use_cls=False, use_rec=True) print(result) print(elapse) 返回值result: List[List[float], str, float] ([[左上, 右上, 右下, 左下], 文本内容, 置信度])\n[ [[[9.0, 2.0], [321.0, 11.0], [318.0, 102.0], [6.0, 93.0]], '正品促销', '0.7986101984977723'], [[[70.0, 98.0], [251.0, 98.0], [251.0, 125.0], [70.0, 125.0]], '大桶装更划算', '0.7368737288883754'], ... ] from rapidocr_onnxruntime import RapidOCR engine = RapidOCR() img_path = 'tests/test_files/ch_en_num.jpg' result, elapse = engine(img_path, use_det=False, use_cls=True, use_rec=True) print(result) print(elapse) 返回值result: List[List[str, float]] ([识别的文本, 置信度])\n[ ['韩国小馆', 0.7992169380187988], ... ] from rapidocr_onnxruntime import RapidOCR engine = RapidOCR() img_path = 'tests/test_files/ch_en_num.jpg' # 默认都为True result, elapse = engine(img_path, use_det=True, use_cls=True, use_rec=True) print(result) print(elapse) 返回值result: List[List[float], str, float] ([[左上, 右上, 右下, 左下], 文本内容, 置信度])\n[ [[[9.0, 2.0], [321.0, 11.0], [318.0, 102.0], [6.0, 93.0]], '正品促销', '0.7986101984977723'], [[[70.0, 98.0], [251.0, 98.0], [251.0, 125.0], [70.0, 125.0]], '大桶装更划算', '0.7368737288883754'], ... ] 可视化查看结果 link为了便于查看检测和识别结果，该库中封装了VisRes类，可借助该类快速可视化查看结果。\ninfo 可视化时，需要提供字体文件。下载链接：link\n只可视化检测 可视化检测和识别 import cv2 from rapidocr_onnxruntime import RapidOCR, VisRes engine = RapidOCR() vis = VisRes() image_path = \"tests/test_files/ch_en_num.jpg\" img = cv2.imread(image_path) result, elapse_list = engine(img) boxes, txts, scores = list(zip(*result)) res = vis(img, boxes) cv2.imwrite(\"only_vis_det.png\", res) import cv2 from rapidocr_onnxruntime import RapidOCR, VisRes engine = RapidOCR() vis = VisRes() image_path = \"tests/test_files/ch_en_num.jpg\" img = cv2.imread(image_path) result, elapse_list = engine(img) boxes, txts, scores = list(zip(*result)) font_path=\"resources/fonts/FZYTK.TTF\" res = vis(img, boxes, txts, scores, font_path) cv2.imwrite(\"vis_det_rec.png\", res) "
            }
        );
    index.add(
            {
                id:  11 ,
                href: "\/RapidOCRDocs\/docs\/install_usage\/rapidocr\/cli\/",
                title: "命令行工具",
                description: "rapidocr_onnxruntime包含了命令行工具，安装之后，即可使用。\n参数说明 link $ rapidocr_onnxruntime -h usage: rapidocr_onnxruntime [-h] -img IMG_PATH [-p] [--text_score TEXT_SCORE] [--no_det] [--no_cls] [--no_rec] [--print_verbose] [--min_height MIN_HEIGHT] [--width_height_ratio WIDTH_HEIGHT_RATIO] [--det_use_cuda] [--det_model_path DET_MODEL_PATH] [--det_limit_side_len DET_LIMIT_SIDE_LEN] [--det_limit_type {max,min}] [--det_thresh DET_THRESH] [--det_box_thresh DET_BOX_THRESH] [--det_unclip_ratio DET_UNCLIP_RATIO] [--det_donot_use_dilation] [--det_score_mode {slow,fast}] [--cls_use_cuda] [--cls_model_path CLS_MODEL_PATH] [--cls_image_shape CLS_IMAGE_SHAPE] [--cls_label_list CLS_LABEL_LIST] [--cls_batch_num CLS_BATCH_NUM] [--cls_thresh CLS_THRESH] [--rec_use_cuda] [--rec_model_path REC_MODEL_PATH] [--rec_img_shape REC_IMG_SHAPE] [--rec_batch_num REC_BATCH_NUM] [-vis] [--vis_font_path VIS_FONT_PATH] [--vis_save_path VIS_SAVE_PATH] optional arguments: -h, --help show this help message and exit -img IMG_PATH, --img_path IMG_PATH -p, --print_cost Global: --text_score TEXT_SCORE --no_det --no_cls --no_rec --print_verbose --min_height MIN_HEIGHT --width_height_ratio WIDTH_HEIGHT_RATIO Det: --det_use_cuda --det_model_path DET_MODEL_PATH --det_limit_side_len DET_LIMIT_SIDE_LEN --det_limit_type {max,min} --det_thresh DET_THRESH --det_box_thresh DET_BOX_THRESH --det_unclip_ratio DET_UNCLIP_RATIO --det_donot_use_dilation --det_score_mode {slow,fast} Cls: --cls_use_cuda --cls_model_path CLS_MODEL_PATH --cls_image_shape CLS_IMAGE_SHAPE --cls_label_list CLS_LABEL_LIST --cls_batch_num CLS_BATCH_NUM --cls_thresh CLS_THRESH Rec: --rec_use_cuda --rec_model_path REC_MODEL_PATH --rec_img_shape REC_IMG_SHAPE --rec_batch_num REC_BATCH_NUM Visual Result: -vis, --vis_res --vis_font_path VIS_FONT_PATH When -vis is True, the font_path must have value.",
                content: "rapidocr_onnxruntime包含了命令行工具，安装之后，即可使用。\n参数说明 link $ rapidocr_onnxruntime -h usage: rapidocr_onnxruntime [-h] -img IMG_PATH [-p] [--text_score TEXT_SCORE] [--no_det] [--no_cls] [--no_rec] [--print_verbose] [--min_height MIN_HEIGHT] [--width_height_ratio WIDTH_HEIGHT_RATIO] [--det_use_cuda] [--det_model_path DET_MODEL_PATH] [--det_limit_side_len DET_LIMIT_SIDE_LEN] [--det_limit_type {max,min}] [--det_thresh DET_THRESH] [--det_box_thresh DET_BOX_THRESH] [--det_unclip_ratio DET_UNCLIP_RATIO] [--det_donot_use_dilation] [--det_score_mode {slow,fast}] [--cls_use_cuda] [--cls_model_path CLS_MODEL_PATH] [--cls_image_shape CLS_IMAGE_SHAPE] [--cls_label_list CLS_LABEL_LIST] [--cls_batch_num CLS_BATCH_NUM] [--cls_thresh CLS_THRESH] [--rec_use_cuda] [--rec_model_path REC_MODEL_PATH] [--rec_img_shape REC_IMG_SHAPE] [--rec_batch_num REC_BATCH_NUM] [-vis] [--vis_font_path VIS_FONT_PATH] [--vis_save_path VIS_SAVE_PATH] optional arguments: -h, --help show this help message and exit -img IMG_PATH, --img_path IMG_PATH -p, --print_cost Global: --text_score TEXT_SCORE --no_det --no_cls --no_rec --print_verbose --min_height MIN_HEIGHT --width_height_ratio WIDTH_HEIGHT_RATIO Det: --det_use_cuda --det_model_path DET_MODEL_PATH --det_limit_side_len DET_LIMIT_SIDE_LEN --det_limit_type {max,min} --det_thresh DET_THRESH --det_box_thresh DET_BOX_THRESH --det_unclip_ratio DET_UNCLIP_RATIO --det_donot_use_dilation --det_score_mode {slow,fast} Cls: --cls_use_cuda --cls_model_path CLS_MODEL_PATH --cls_image_shape CLS_IMAGE_SHAPE --cls_label_list CLS_LABEL_LIST --cls_batch_num CLS_BATCH_NUM --cls_thresh CLS_THRESH Rec: --rec_use_cuda --rec_model_path REC_MODEL_PATH --rec_img_shape REC_IMG_SHAPE --rec_batch_num REC_BATCH_NUM Visual Result: -vis, --vis_res --vis_font_path VIS_FONT_PATH When -vis is True, the font_path must have value. --vis_save_path VIS_SAVE_PATH The directory of saving the vis image. 使用示例 link notifications 以下只给出常见用例，具体可自行探索使用 图像预测 只使用检测 只使用识别 可视化查看 rapidocr_onnxruntime -img tests/test_files/ch_en_num.jpg rapidocr_onnxruntime -img tests/test_files/ch_en_num.jpg -no_cls -no_rec rapidocr_onnxruntime -img tests/test_files/ch_en_num.jpg -no_det -no_cls raprapidocr_onnxruntime -img tests/test_files/ch_en_num.jpg -vis --vis_font_path resources/fonts/FZYTK.TTF "
            }
        );
    index.add(
            {
                id:  12 ,
                href: "\/RapidOCRDocs\/docs\/install_usage\/rapidocr_web\/",
                title: "rapidocr_web",
                description: "",
                content: ""
            }
        );
    index.add(
            {
                id:  13 ,
                href: "\/RapidOCRDocs\/docs\/install_usage\/rapidocr_web\/rapidocr_web\/",
                title: "安装及使用",
                description: "简介 link 该库是rapidocr_onnxruntime的web版本，依赖最新版本的rapidocr_onnxruntime库。\n如果想要离线部署，可以先手动下载rapidocr_onnxruntime whl包，再手动安装rapidocr_web whl包来使用。\n网页上显示的推理时间具体解释如下：\n安装 link pip install rapidocr_web 使用 link 用法:\n$ rapidocr_web -h usage: rapidocr_web [-h] [-ip IP] [-p PORT] optional arguments: -h, --help show this help message and exit -ip IP, --ip IP IP Address -p PORT, --port PORT IP port 运行:\nrapidocr_web -ip 0.0.0.0 -p 9003 浏览器打开 http://localhost:9003/，enjoy it!",
                content: " 简介 link 该库是rapidocr_onnxruntime的web版本，依赖最新版本的rapidocr_onnxruntime库。\n如果想要离线部署，可以先手动下载rapidocr_onnxruntime whl包，再手动安装rapidocr_web whl包来使用。\n网页上显示的推理时间具体解释如下：\n安装 link pip install rapidocr_web 使用 link 用法:\n$ rapidocr_web -h usage: rapidocr_web [-h] [-ip IP] [-p PORT] optional arguments: -h, --help show this help message and exit -ip IP, --ip IP IP Address -p PORT, --port PORT IP port 运行:\nrapidocr_web -ip 0.0.0.0 -p 9003 浏览器打开 http://localhost:9003/，enjoy it!\n"
            }
        );
    index.add(
            {
                id:  14 ,
                href: "\/RapidOCRDocs\/docs\/install_usage\/rapidocr_web\/desktop_usage\/",
                title: "桌面版使用教程",
                description: "引言 link 说明：桌面版指的是可以直接解压，双击即可运行的版本。 通俗来说，对rapidocr_web做了打包，将相关依赖全部放到一个zip包中，不需要本地有额外的环境，降低使用门槛。 下面会以Windows版为例，作简要说明。 使用步骤 link 下载对应的zip包\n目前已有的zip包如下：\n下载方式: Github | 百度网盘 | QQ群共享（群号：755960114）\n解压目录如下示例\n. ├── api-ms-win-core-console-l1-1-0.dll ├── api-ms-win-core-datetime-l1-1-0.dll ├── api-ms-win-core-debug-l1-1-0.dll ├── api-ms-win-core-errorhandling-l1-1-0.dll ├── api-ms-win-core-file-l1-1-0.dll ├── api-ms-win-core-file-l1-2-0.dll ├── api-ms-win-core-file-l2-1-0.dll ├── api-ms-win-core-handle-l1-1-0.dll ├── api-ms-win-core-heap-l1-1-0.dll ├── api-ms-win-core-interlocked-l1-1-0.dll ├── api-ms-win-core-libraryloader-l1-1-0.dll ├── api-ms-win-core-localization-l1-2-0.dll ├── api-ms-win-core-memory-l1-1-0.dll ├── api-ms-win-core-namedpipe-l1-1-0.dll ├── api-ms-win-core-processenvironment-l1-1-0.dll ├── api-ms-win-core-processthreads-l1-1-0.dll ├── api-ms-win-core-processthreads-l1-1-1.dll ├── api-ms-win-core-profile-l1-1-0.dll ├── api-ms-win-core-rtlsupport-l1-1-0.dll ├── api-ms-win-core-string-l1-1-0.dll ├── api-ms-win-core-synch-l1-1-0.dll ├── api-ms-win-core-synch-l1-2-0.dll ├── api-ms-win-core-sysinfo-l1-1-0.dll ├── api-ms-win-core-timezone-l1-1-0.dll ├── api-ms-win-core-util-l1-1-0.dll ├── api-ms-win-crt-conio-l1-1-0.dll ├── api-ms-win-crt-convert-l1-1-0.",
                content: "引言 link 说明：桌面版指的是可以直接解压，双击即可运行的版本。 通俗来说，对rapidocr_web做了打包，将相关依赖全部放到一个zip包中，不需要本地有额外的环境，降低使用门槛。 下面会以Windows版为例，作简要说明。 使用步骤 link 下载对应的zip包\n目前已有的zip包如下：\n下载方式: Github | 百度网盘 | QQ群共享（群号：755960114）\n解压目录如下示例\n. ├── api-ms-win-core-console-l1-1-0.dll ├── api-ms-win-core-datetime-l1-1-0.dll ├── api-ms-win-core-debug-l1-1-0.dll ├── api-ms-win-core-errorhandling-l1-1-0.dll ├── api-ms-win-core-file-l1-1-0.dll ├── api-ms-win-core-file-l1-2-0.dll ├── api-ms-win-core-file-l2-1-0.dll ├── api-ms-win-core-handle-l1-1-0.dll ├── api-ms-win-core-heap-l1-1-0.dll ├── api-ms-win-core-interlocked-l1-1-0.dll ├── api-ms-win-core-libraryloader-l1-1-0.dll ├── api-ms-win-core-localization-l1-2-0.dll ├── api-ms-win-core-memory-l1-1-0.dll ├── api-ms-win-core-namedpipe-l1-1-0.dll ├── api-ms-win-core-processenvironment-l1-1-0.dll ├── api-ms-win-core-processthreads-l1-1-0.dll ├── api-ms-win-core-processthreads-l1-1-1.dll ├── api-ms-win-core-profile-l1-1-0.dll ├── api-ms-win-core-rtlsupport-l1-1-0.dll ├── api-ms-win-core-string-l1-1-0.dll ├── api-ms-win-core-synch-l1-1-0.dll ├── api-ms-win-core-synch-l1-2-0.dll ├── api-ms-win-core-sysinfo-l1-1-0.dll ├── api-ms-win-core-timezone-l1-1-0.dll ├── api-ms-win-core-util-l1-1-0.dll ├── api-ms-win-crt-conio-l1-1-0.dll ├── api-ms-win-crt-convert-l1-1-0.dll ├── api-ms-win-crt-environment-l1-1-0.dll ├── api-ms-win-crt-filesystem-l1-1-0.dll ├── api-ms-win-crt-heap-l1-1-0.dll ├── api-ms-win-crt-locale-l1-1-0.dll ├── api-ms-win-crt-math-l1-1-0.dll ├── api-ms-win-crt-process-l1-1-0.dll ├── api-ms-win-crt-runtime-l1-1-0.dll ├── api-ms-win-crt-stdio-l1-1-0.dll ├── api-ms-win-crt-string-l1-1-0.dll ├── api-ms-win-crt-time-l1-1-0.dll ├── api-ms-win-crt-utility-l1-1-0.dll ├── _asyncio.pyd ├── base_library.zip ├── _bz2.pyd ├── _ctypes.pyd ├── cv2 ├── _decimal.pyd ├── _hashlib.pyd ├── importlib_metadata-6.6.0.dist-info ├── libcrypto-1_1.dll ├── libopenblas.XWYDX2IKJW2NMTWSFYNGFUWKQU3LYTCZ.gfortran-win_amd64.dll ├── libssl-1_1.dll ├── _lzma.pyd ├── markupsafe ├── MSVCP140.dll ├── _multiprocessing.pyd ├── numpy ├── onnxruntime ├── _overlapped.pyd ├── PIL ├── pyclipper ├── pyexpat.pyd ├── python37.dll ├── python3.dll ├── _queue.pyd ├── rapidocr_onnxruntime ├── RapidOCRWeb.exe ├── select.pyd ├── shapely ├── Shapely.libs ├── _socket.pyd ├── _ssl.pyd ├── static ├── templates ├── ucrtbase.dll ├── unicodedata.pyd ├── VCRUNTIME140_1.dll ├── VCRUNTIME140.dll └── yaml 双击RapidOCRWeb.exe运行，界面如下图所示：\n浏览器中打开http://localhost:9003/，即可看到熟悉的RapidOCRWeb界面。\ninfo 如果遇到浏览器不显示界面的情况，可以尝试在黑框上按Ctrl + C "
            }
        );
    index.add(
            {
                id:  15 ,
                href: "\/RapidOCRDocs\/docs\/install_usage\/rapidocr_web\/nuitka_package\/",
                title: "Nuitka打包",
                description: "–by DeadWood8 打包环境 link OS: Windows11 Python: 3.8.10 rapidocr_onnxruntime: 1.2.0 nuitka: 1.5.3 onnxruntime: 1.14.0 打包步骤 link 安装Nuitka pip install nuitka 注：第一次安装会自动下载mingw和ccache，也可以手动配置，自行某度。 修改rapidocr-onnxruntime源码（修改后可以将所有依赖打包进文件） info rapidocr_onnxruntime\u003e=1.2.8以后不用再手动修改下面代码，已经做了修改。可以跳过该步。 进入rapidocr-onnxruntime安装位置，一般在Lib\\site-packages\\rapidocr_onnxruntime或者你设置的虚拟环境下。 用编辑器打开rapid_ocr_api.py，对39-52行进行修改，如下图： nuitka打包 cd rapidocr_web nuitka --mingw64 --standalone --show-memory --show-progress --nofollow-import-to=tkinter --output-dir=out ocrweb.py 如下图所示： 拷贝静态文件 打包后的文件位于当前位置的out\\ocrweb.dist目录下，需要将web项目和rapidocr-onnxruntime相关文件拷贝到此目录。 拷贝rapidocr_web目录static和templates两个文件夹全部拷贝到out\\ocrweb.dist下 在out\\ocrweb.dist创建rapidocr_onnxruntime文件夹，将Lib\\site-packages\\rapidocr_onnxruntime目录下的config.yaml和models文件夹拷贝到out\\ocrweb.dist\\rapidocr_onnxruntime文件夹内 运行程序 进入out\\ocrweb.dist，直接双击ocrweb.exe运行。 打包好的exe下载：百度网盘 | Google Drive | Gitee 补充 link 如果不想运行程序后有黑框，可以在打包命令中加入以下参数 --windows-disable-console 完整命令为： nuitka --mingw64 --standalone --show-memory --show-progress --nofollow-import-to=tkinter --windows-disable-console --output-dir=out ocrweb.py ",
                content: "–by DeadWood8\n打包环境 link OS: Windows11 Python: 3.8.10 rapidocr_onnxruntime: 1.2.0 nuitka: 1.5.3 onnxruntime: 1.14.0 打包步骤 link 安装Nuitka\npip install nuitka 注：第一次安装会自动下载mingw和ccache，也可以手动配置，自行某度。\n修改rapidocr-onnxruntime源码（修改后可以将所有依赖打包进文件） info rapidocr_onnxruntime\u003e=1.2.8以后不用再手动修改下面代码，已经做了修改。可以跳过该步。 进入rapidocr-onnxruntime安装位置，一般在Lib\\site-packages\\rapidocr_onnxruntime或者你设置的虚拟环境下。 用编辑器打开rapid_ocr_api.py，对39-52行进行修改，如下图： nuitka打包\ncd rapidocr_web nuitka --mingw64 --standalone --show-memory --show-progress --nofollow-import-to=tkinter --output-dir=out ocrweb.py 如下图所示： 拷贝静态文件\n打包后的文件位于当前位置的out\\ocrweb.dist目录下，需要将web项目和rapidocr-onnxruntime相关文件拷贝到此目录。 拷贝rapidocr_web目录static和templates两个文件夹全部拷贝到out\\ocrweb.dist下 在out\\ocrweb.dist创建rapidocr_onnxruntime文件夹，将Lib\\site-packages\\rapidocr_onnxruntime目录下的config.yaml和models文件夹拷贝到out\\ocrweb.dist\\rapidocr_onnxruntime文件夹内 运行程序\n进入out\\ocrweb.dist，直接双击ocrweb.exe运行。 打包好的exe下载：百度网盘 | Google Drive | Gitee\n补充 link 如果不想运行程序后有黑框，可以在打包命令中加入以下参数 --windows-disable-console 完整命令为： nuitka --mingw64 --standalone --show-memory --show-progress --nofollow-import-to=tkinter --windows-disable-console --output-dir=out ocrweb.py "
            }
        );
    index.add(
            {
                id:  16 ,
                href: "\/RapidOCRDocs\/docs\/install_usage\/rapidocr_web\/pyinstaller\/",
                title: "PyInstaller打包",
                description: "参考Actions中写法，详情移步：package_ocrweb.yml",
                content: "参考Actions中写法，详情移步：package_ocrweb.yml\n"
            }
        );
    index.add(
            {
                id:  17 ,
                href: "\/RapidOCRDocs\/docs\/install_usage\/rapidocr_api\/",
                title: "rapidocr_api",
                description: "简介 link 该包是将rapidocr_onnxruntime库做了API封装，采用FastAPI + uvicorn实现。 定位是一个快速调用rapidocr_onnxruntime的API接口，没有考虑多进程处理并发请求，如果有这需求的小伙伴，可以看看gunicorn等。 安装 link pip install rapidocr_api 启动服务端 link 用法: $ rapidocr_api -h usage: rapidocr_api [-h] [-ip IP] [-p PORT] optional arguments: -h, --help show this help message and exit -ip IP, --ip IP IP Address -p PORT, --port PORT IP port 启动: rapidocr_api -ip 0.0.0.0 -p 9003 调用 link info 调用本质就是发送一个POST请求，以下给出Curl和Python的调用示例，其他编程语言同理。 Curl调用 link curl -F image_file=@1.png http://0.0.0.0:9003/ocr Python调用 link 以文件方式发送POST请求 以base64方式发送POST请求 import requests url = 'http://localhost:9003/ocr' img_path = 'tests/test_files/ch_en_num.",
                content: " 简介 link 该包是将rapidocr_onnxruntime库做了API封装，采用FastAPI + uvicorn实现。 定位是一个快速调用rapidocr_onnxruntime的API接口，没有考虑多进程处理并发请求，如果有这需求的小伙伴，可以看看gunicorn等。 安装 link pip install rapidocr_api 启动服务端 link 用法: $ rapidocr_api -h usage: rapidocr_api [-h] [-ip IP] [-p PORT] optional arguments: -h, --help show this help message and exit -ip IP, --ip IP IP Address -p PORT, --port PORT IP port 启动: rapidocr_api -ip 0.0.0.0 -p 9003 调用 link info 调用本质就是发送一个POST请求，以下给出Curl和Python的调用示例，其他编程语言同理。 Curl调用 link curl -F image_file=@1.png http://0.0.0.0:9003/ocr Python调用 link 以文件方式发送POST请求 以base64方式发送POST请求 import requests url = 'http://localhost:9003/ocr' img_path = 'tests/test_files/ch_en_num.jpg' with open(img_path, 'rb') as f: file_dict = {'image_file': (img_path, f, 'image/png')} response = requests.post(url, files=file_dict, timeout=60) print(response.json()) import base64 import requests url = 'http://localhost:9003/ocr' img_path = 'tests/test_files/ch_en_num.jpg' with open(img_path, 'rb') as fa: img_str = base64.b64encode(fa.read()) payload = {'image_data': img_str} response = requests.post(url, data=payload) print(response.json()) API输出 link 输出结果说明：\n如果图像中存在文字，则会输出字典格式，具体介绍如下： { \"0\": { \"rec_txt\": \"香港深圳抽血，\", # 识别的文本 \"dt_boxes\": [ # 依次为左上角 → 右上角 → 右下角 → 左下角 [265, 18], [472, 231], [431, 271], [223, 59] ], \"score\": \"0.8175641223788261\" # 置信度 } } 如果没有检测到文字，则会输出空json({})。 示例结果：\n详情 { \"0\": { \"rec_txt\": \"8月26日！\", \"dt_boxes\": [ [333.0, 72.0], [545.0, 40.0], [552.0, 90.0], [341.0, 122.0] ], \"score\": \"0.7342076812471662\" }, \"1\": { \"rec_txt\": \"澳洲名校招生信息\", \"dt_boxes\": [ [266.0, 163.0], [612.0, 116.0], [619.0, 163.0], [272.0, 210.0] ], \"score\": \"0.8261737492349412\" }, \"2\": { \"rec_txt\": \"解读！！\", \"dt_boxes\": [ [341.0, 187.0], [595.0, 179.0], [598.0, 288.0], [344.0, 296.0] ], \"score\": \"0.6152311325073242\" }, \"3\": { \"rec_txt\": \"Rules...\", \"dt_boxes\": [ [446.0, 321.0], [560.0, 326.0], [559.0, 352.0], [445.0, 347.0] ], \"score\": \"0.8704230123096042\" } } warning OCR API的输出结果为最原始结果，大家可按需进一步扩展。 "
            }
        );
    index.add(
            {
                id:  18 ,
                href: "\/RapidOCRDocs\/docs\/install_usage\/rapidocr_web\/ocrweb_multi\/",
                title: "多语言版本部署使用",
                description: "简介 link 同时支持多种语言，可通过接口参数配置语言及预测过程中的其他参数 调整结果展示方式为基于canvas, 减少后端处理和接口数据传输 预测接口添加Token验证支持 添加pyinstaller打包脚本，简化安装步骤 示例打包结果：pyinstaller demo 安装 link 克隆项目到本地 git clone -b main https://github.com/RapidAI/RapidOCR.git 安装运行所需环境 cd ocrweb_multi pip install -r requirements.txt -i https://pypi.douban.com/simple/ 运行步骤 link 下载models文件到当前目录下\n下载链接：百度网盘 | Google Drive 最终目录结构如下： ocr_web_multi |-- README.md |-- build.py |-- config.yaml |-- main.py |-- main.spec |-- models | |-- Multilingual_PP-OCRv3_det_infer.onnx | |-- ch_PP-OCRv3_det_infer.onnx | |-- ch_PP-OCRv3_rec_infer.meta.onnx | |-- ch_ppocr_mobile_v2.0_cls_infer.meta.onnx | |-- chinese_cht_PP-OCRv3_rec_infer.meta.onnx | |-- en_PP-OCRv3_det_infer.onnx | |-- en_PP-OCRv3_rec_infer.meta.onnx | `-- japan_PP-OCRv3_rec_infer.",
                content: "简介 link 同时支持多种语言，可通过接口参数配置语言及预测过程中的其他参数 调整结果展示方式为基于canvas, 减少后端处理和接口数据传输 预测接口添加Token验证支持 添加pyinstaller打包脚本，简化安装步骤 示例打包结果：pyinstaller demo 安装 link 克隆项目到本地 git clone -b main https://github.com/RapidAI/RapidOCR.git 安装运行所需环境 cd ocrweb_multi pip install -r requirements.txt -i https://pypi.douban.com/simple/ 运行步骤 link 下载models文件到当前目录下\n下载链接：百度网盘 | Google Drive 最终目录结构如下： ocr_web_multi |-- README.md |-- build.py |-- config.yaml |-- main.py |-- main.spec |-- models | |-- Multilingual_PP-OCRv3_det_infer.onnx | |-- ch_PP-OCRv3_det_infer.onnx | |-- ch_PP-OCRv3_rec_infer.meta.onnx | |-- ch_ppocr_mobile_v2.0_cls_infer.meta.onnx | |-- chinese_cht_PP-OCRv3_rec_infer.meta.onnx | |-- en_PP-OCRv3_det_infer.onnx | |-- en_PP-OCRv3_rec_infer.meta.onnx | `-- japan_PP-OCRv3_rec_infer.meta.onnx |-- rapidocr | |-- __init__.py | |-- classify.py | |-- detect.py | |-- detect_process.py | |-- main.py | |-- rapid_ocr_api.py | `-- recognize.py |-- requirements.txt |-- static | |-- css | |-- favicon.ico | |-- hint.svg | |-- index.html | `-- js |-- utils | |-- config.py | `-- utils.py |-- wrapper.c `-- wrapper.rc 运行main.py\npython main.py 打开 http://127.0.0.1:8001 即可， enjoy it!\n"
            }
        );
    index.add(
            {
                id:  19 ,
                href: "\/RapidOCRDocs\/docs\/inference_engine\/",
                title: "推理引擎相关",
                description: "",
                content: ""
            }
        );
    index.add(
            {
                id:  20 ,
                href: "\/RapidOCRDocs\/docs\/inference_engine\/onnxruntime\/",
                title: "ONNXRuntime",
                description: "",
                content: ""
            }
        );
    index.add(
            {
                id:  21 ,
                href: "\/RapidOCRDocs\/docs\/inference_engine\/onnxruntime\/infer_optim\/",
                title: "CPU推理优化",
                description: "引言 link 平时推理用的最多是ONNXRuntime，推理引擎的合适调配对推理性能有着至关重要的影响。但是有关于ONNXRuntime参数设置的资料却散落在各个地方，不能形成有效的指导意见。 因此，决定在这一篇文章中来梳理一下相关的设置。 以下参数都是来自SessionOptions中 相关测试代码可以前往AI Studio查看 欢迎补充和指出不足之处。 推荐常用设置 link import onnxruntime as rt sess_options = rt.SessionOptions() sess_options.graph_optimization_level = rt.GraphOptimizationLevel.ORT_ENABLE_ALL sess_options.log_severity_level = 4 sess_options.enable_cpu_mem_arena = False # 其他参数，采用默认即可 enable_cpu_mem_arena link 作用：启用CPU上的memory arena。Arena可能会为将来预先申请很多内存。如果不想使用它，可以设置为enable_cpu_mem_area=False，默认是True\n结论：建议关闭\n开启之后，占用内存会剧增（5618.3M » 5.3M），且持续占用，不释放；推理时间只有大约13%提升 测试环境：\nPython: 3.7.13 ONNXRuntime: 1.14.1 测试代码（来自issue 11627，enable_cpu_memory_area_example.zip）\n# pip install onnxruntime==1.14.1 # pip install memory_profiler import numpy as np import onnxruntime as ort from memory_profiler import profile @profile def onnx_prediction(model_path, input_data): ort_sess = ort.InferenceSession(model_path, sess_options=sess_options) preds = ort_sess.",
                content: "引言 link 平时推理用的最多是ONNXRuntime，推理引擎的合适调配对推理性能有着至关重要的影响。但是有关于ONNXRuntime参数设置的资料却散落在各个地方，不能形成有效的指导意见。 因此，决定在这一篇文章中来梳理一下相关的设置。 以下参数都是来自SessionOptions中 相关测试代码可以前往AI Studio查看 欢迎补充和指出不足之处。 推荐常用设置 link import onnxruntime as rt sess_options = rt.SessionOptions() sess_options.graph_optimization_level = rt.GraphOptimizationLevel.ORT_ENABLE_ALL sess_options.log_severity_level = 4 sess_options.enable_cpu_mem_arena = False # 其他参数，采用默认即可 enable_cpu_mem_arena link 作用：启用CPU上的memory arena。Arena可能会为将来预先申请很多内存。如果不想使用它，可以设置为enable_cpu_mem_area=False，默认是True\n结论：建议关闭\n开启之后，占用内存会剧增（5618.3M » 5.3M），且持续占用，不释放；推理时间只有大约13%提升 测试环境：\nPython: 3.7.13 ONNXRuntime: 1.14.1 测试代码（来自issue 11627，enable_cpu_memory_area_example.zip）\n# pip install onnxruntime==1.14.1 # pip install memory_profiler import numpy as np import onnxruntime as ort from memory_profiler import profile @profile def onnx_prediction(model_path, input_data): ort_sess = ort.InferenceSession(model_path, sess_options=sess_options) preds = ort_sess.run(output_names=[\"predictions\"], input_feed={\"input_1\": input_data})[0] return preds sess_options = ort.SessionOptions() sess_options.enable_cpu_mem_arena = False input_data = np.load('enable_cpu_memory_area_example/input.npy') print(f'input_data shape: {input_data.shape}') model_path = 'enable_cpu_memory_area_example/model.onnx' onnx_prediction(model_path, input_data) Windows端 | Mac端 | Linux端 测试情况都大致相同\nenable_cpu_mem_arena=True (demo) PS G:\u003e python .\\test_enable_cpu_mem_arena.py enable_cpu_mem_arena: True input_data shape: (32, 200, 200, 1) Filename: .\\test_enable_cpu_mem_arena.py Line # Mem usage Increment Occurrences Line Contents ============================================================= 7 69.1 MiB 69.1 MiB 1 @profile 8 def onnx_prediction(model_path, input_data): 9 77.2 MiB 8.1 MiB 1 ort_sess = ort.InferenceSession(model_path, sess_options=sess_options) 10 77.2 MiB 0.0 MiB 1 preds = ort_sess.run(output_names=[\"predictions\"], 11 5695.5 MiB 5618.3 MiB 1 input_feed={\"input_1\": input_data})[0] 12 5695.5 MiB 0.0 MiB 1 return preds enable_cpu_mem_arena=False (demo) PS G:\u003e python .\\test_enable_cpu_mem_arena.py enable_cpu_mem_arena: False input_data shape: (32, 200, 200, 1) Filename: .\\test_enable_cpu_mem_arena.py Line # Mem usage Increment Occurrences Line Contents ============================================================= 7 69.1 MiB 69.1 MiB 1 @profile 8 def onnx_prediction(model_path, input_data): 9 76.9 MiB 7.8 MiB 1 ort_sess = ort.InferenceSession(model_path, sess_options=sess_options) 10 76.9 MiB 0.0 MiB 1 preds = ort_sess.run(output_names=[\"predictions\"], 11 82.1 MiB 5.3 MiB 1 input_feed={\"input_1\": input_data})[0] 12 82.1 MiB 0.0 MiB 1 return preds enable_profiling link 开启这个参数，在推理时，会生成一个类似onnxruntime_profile__2023-05-07_09-02-15.json的日志文件，包含详细的性能数据（线程、每个运算符的延迟等）。 建议开启 示例代码： import onnxruntime as rt sess_options = rt.SessionOptions() sess_options.enable_profiling = True execution_mode link 设置运行模型的模式，包括rt.ExecutionMode.ORT_SEQUENTIAL和rt.ExecutionMode.ORT_PARALLEL。一个序列执行，一个并行。默认是序列执行 通常来说，当一个模型中有许多分支时，可以设置该参数为ORT_PARALLEL来达到更好的表现 当设置sess_options.execution_mode = rt.ExecutionMode.ORT_PARALLEL时，可以设置sess_options.inter_op_num_threads来控制使用线程的数量，来并行化执行（模型中各个节点之间） inter_op_num_threads link 设置并行化执行图（跨节点）时，使用的线程数。默认是0，交由onnxruntime自行决定。 示例代码： import onnxruntime as rt sess_options = rt.SessionOptions() sess_options.inter_op_num_threads = 2 intra_op_num_threads link 设置并行化执行图（内部节点）时，使用的线程数。默认是0，交由onnxruntime自行决定，一般会选择使用设备上所有的核。 ⚠️ 这个值并不是越大越好，具体参考AI Studio中的消融实验。 示例代码： import onnxruntime as rt sess_options = rt.SessionOptions() sess_options.intra_op_num_threads = 2 graph_optimization_level link 运行图时，对图中算子的优化水平。默认是开启全部算子的优化。建议采用默认值即可。 可选的枚举值有：ORT_DISABLE_ALL | ORT_ENABLE_BASIC | ORT_ENABLE_EXTENDED | ORT_ENABLE_ALL 示例代码： import onnxruntime as rt sess_options = rt.SessionOptions() sess_options.graph_optimization_level = rt.GraphOptimizationLevel.ORT_ENABLE_ALL 参考资料 link ONNX Runtime Performance Tuning Python API "
            }
        );
    index.add(
            {
                id:  22 ,
                href: "\/RapidOCRDocs\/docs\/inference_engine\/onnxruntime\/onnxruntime-gpu\/",
                title: "GPU版推理",
                description: "onnxruntime-gpu版相关说明 link 目前已知在onnxruntime-gpu上测试过的小伙伴，反映都是GPU推理速度比在CPU上慢很多。关于该问题，已经提了相关issue，具体可参见onnxruntime issue#13198 有关onnxruntime-gpu推理慢的相关帖子 link Pre-allocating dynamic shaped tensor memory for ONNX runtime inference? 快速查看比较版本 link 国外小伙伴可以基于Google Colab，国内的小伙伴可以基于百度的AI Studio来查看效果 结论 linkonnxruntime-gpu版在动态输入情况下，推理速度要比CPU慢很多。而OCR任务就是动态输入，因此不推荐使用onnxruntime-gpu版推理。\n目前一直在找寻GPU端，可以快速推理ONNX模型的推理引擎。\n相关对比表格 link 设备 onnxruntime-gpu CPU总耗时(s) CPU平均耗时(s/img) GPU总耗时(s) GPU平均耗时(s/img) 设备11 1.11.0 296.8841 1.18282 646.14667 2.57429 设备22 1.12.1 149.35427 0.50504 250.81760 0.99927 宏碁(Acer) 暗影骑士·威N50-N93游戏台式机 | Windows | 十代i5-10400F 16G 512G SSD | NVIDIA GeForce GTX 1660Super 6G ↩︎\nLinux | AMD R9 5950X | NVIDIA GeForce RTX 3090 ↩︎",
                content: "onnxruntime-gpu版相关说明 link 目前已知在onnxruntime-gpu上测试过的小伙伴，反映都是GPU推理速度比在CPU上慢很多。关于该问题，已经提了相关issue，具体可参见onnxruntime issue#13198 有关onnxruntime-gpu推理慢的相关帖子 link Pre-allocating dynamic shaped tensor memory for ONNX runtime inference? 快速查看比较版本 link 国外小伙伴可以基于Google Colab，国内的小伙伴可以基于百度的AI Studio来查看效果 结论 linkonnxruntime-gpu版在动态输入情况下，推理速度要比CPU慢很多。而OCR任务就是动态输入，因此不推荐使用onnxruntime-gpu版推理。\n目前一直在找寻GPU端，可以快速推理ONNX模型的推理引擎。\n相关对比表格 link 设备 onnxruntime-gpu CPU总耗时(s) CPU平均耗时(s/img) GPU总耗时(s) GPU平均耗时(s/img) 设备11 1.11.0 296.8841 1.18282 646.14667 2.57429 设备22 1.12.1 149.35427 0.50504 250.81760 0.99927 宏碁(Acer) 暗影骑士·威N50-N93游戏台式机 | Windows | 十代i5-10400F 16G 512G SSD | NVIDIA GeForce GTX 1660Super 6G ↩︎\nLinux | AMD R9 5950X | NVIDIA GeForce RTX 3090 ↩︎\n"
            }
        );
    index.add(
            {
                id:  23 ,
                href: "\/RapidOCRDocs\/docs\/inference_engine\/openvino\/",
                title: "OpenVINO",
                description: "",
                content: ""
            }
        );
    index.add(
            {
                id:  24 ,
                href: "\/RapidOCRDocs\/docs\/inference_engine\/openvino\/infer\/",
                title: "CPU推理",
                description: "info 基于目前openvino==2022.3.0版，存在申请内存不释放的问题，这也就意味着当推理图像很大时，推理完之后，内存会一直占用。详情可参见issue11939\n安装 link $ pip install openvino # 里面含有mo $ pip install openvino-dev 模型问题 link 因为OpenVINO可以直接推理ONNX模型，故这里暂时不作转换，直接推理之前ONNX模型即可 这里仍然给出转换的代码，用作参考: mo --input_model models/ch_PP-OCRv2_det_infer.onnx --output_dir models/IR/ mo --input_model models/ch_PP-OCRv2_det_infer.onnx \\ --output_dir models/IR/static \\ --input_shape \"[1,3,12128,800]\" 关于OpenVINO link OpenVINO可以直接推理IR、ONNX和PaddlePaddle模型，具体如下(图来源:link)：\n和ONNXRuntime同时推理同一个ONNX模型，OpenVINO推理速度更快\n但是从对比来看，OpenVINO占用内存更大，其原因是拿空间换的时间\n当指定input_shape在一个区间范围时，推理时内存占用会减少一些 示例命令: mo --input_model models/ch_PP-OCRv2_det_infer.onnx \\ --output_dir models/IR/static \\ --input_shape \"[1,3,960:1200,800]\" OpenVINO与ONNXRuntime性能对比 link 推理设备：Windows 64位 Intel(R) Core(TM) i5-4210M CPU @ 2.60GHz 2.59 GHz 测试图像宽高: 12119x810 测试模型 推理框架 占用内存(3次平均) 推理时间(3次平均) ch_PP-OCRv2_det_infer.onnx ONNXRuntime=1.10.0 0.8G 5.",
                content: " info 基于目前openvino==2022.3.0版，存在申请内存不释放的问题，这也就意味着当推理图像很大时，推理完之后，内存会一直占用。详情可参见issue11939\n安装 link $ pip install openvino # 里面含有mo $ pip install openvino-dev 模型问题 link 因为OpenVINO可以直接推理ONNX模型，故这里暂时不作转换，直接推理之前ONNX模型即可 这里仍然给出转换的代码，用作参考: mo --input_model models/ch_PP-OCRv2_det_infer.onnx --output_dir models/IR/ mo --input_model models/ch_PP-OCRv2_det_infer.onnx \\ --output_dir models/IR/static \\ --input_shape \"[1,3,12128,800]\" 关于OpenVINO link OpenVINO可以直接推理IR、ONNX和PaddlePaddle模型，具体如下(图来源:link)：\n和ONNXRuntime同时推理同一个ONNX模型，OpenVINO推理速度更快\n但是从对比来看，OpenVINO占用内存更大，其原因是拿空间换的时间\n当指定input_shape在一个区间范围时，推理时内存占用会减少一些 示例命令: mo --input_model models/ch_PP-OCRv2_det_infer.onnx \\ --output_dir models/IR/static \\ --input_shape \"[1,3,960:1200,800]\" OpenVINO与ONNXRuntime性能对比 link 推理设备：Windows 64位 Intel(R) Core(TM) i5-4210M CPU @ 2.60GHz 2.59 GHz 测试图像宽高: 12119x810 测试模型 推理框架 占用内存(3次平均) 推理时间(3次平均) ch_PP-OCRv2_det_infer.onnx ONNXRuntime=1.10.0 0.8G 5.354s ch_PP-OCRv2_det_infer.onnx openvino=2022.1.0 3.225G 2.53s ch_PP-OCRv2_det_infer.xml FP32 动态图 openvino=2022.1.0 3.175G 2.0455s OpenVINO与ONNXRuntime推理代码写法对比 linkNOTE: 以ch_ppocr_mobile_v2_det中推理代码为例子\nONNXRuntime import onnxruntime # 声明 sess_opt = onnxruntime.SessionOptions() sess_opt.log_severity_level = 4 sess_opt.enable_cpu_mem_arena = False session = onnxruntime.InferenceSession(det_model_path, sess_opt) input_name = session.get_inputs()[0].name output_name = session.get_outputs()[0].name # 推理 preds = session.run([output_name], {input_name: img}) OpenVINO from openvino.runtime import Core # 初始化 ie = Core() model_onnx = ie.read_model(det_model_path) compile_model = ie.compile_model(model=model_onnx, device_name='CPU') vino_session = compile_model.create_infer_request() # 推理 vino_session.infer(inputs=[img]) vino_preds = vino_session.get_output_tensor().data "
            }
        );
    index.add(
            {
                id:  25 ,
                href: "\/RapidOCRDocs\/docs\/inference_engine\/openvino\/infer-gpu\/",
                title: "GPU推理",
                description: " 官方参考文档：docs 考虑到openvino只能使用自家显卡推理，通用性不高，这里暂不作相关配置说明。 ",
                content: " 官方参考文档：docs 考虑到openvino只能使用自家显卡推理，通用性不高，这里暂不作相关配置说明。 "
            }
        );
    index.add(
            {
                id:  26 ,
                href: "\/RapidOCRDocs\/docs\/about_model\/",
                title: "模型相关",
                description: "",
                content: ""
            }
        );
    index.add(
            {
                id:  27 ,
                href: "\/RapidOCRDocs\/docs\/about_model\/model_summary\/",
                title: "不同版本模型之间比较",
                description: "各个版本ONNX模型效果对比(仅供参考) link notifications 以下测试结果均在自己构建测试集上评测所得，不代表在其他测试集上结果也是如此。 文本检测模型 link notifications 以下表格中推理时间是基于MacBook Pro M1运行所得，不同机器会有差别，请侧重查看彼此之间的比较。 评测采用的是TextDetMetric库 + 文本检测测试集，详情可以移步AI Studio运行查看。\n指标计算都是在以下参数下计算得来，差别仅在于模型文件不同。\npre_process: DetResizeForTest: limit_side_len: 736 limit_type: min NormalizeImage: std: [0.229, 0.224, 0.225] mean: [0.485, 0.456, 0.406] scale: 1./255. order: hwc ToCHWImage: KeepKeys: keep_keys: ['image', 'shape'] post_process: thresh: 0.3 box_thresh: 0.5 max_candidates: 1000 unclip_ratio: 1.6 use_dilation: true score_mode: \"fast\" 模型 模型大小 Precision Recall H-mean Speed(s/img) ch_PP-OCRv4_det_infer.onnx 4.5M 0.6958 0.8608 0.7696 0.6176 ch_PP-OCRv4_det_server_infer.onnx 108M 0.7070 0.9330 0.8044 13.9348 ch_PP-OCRv3_det_infer.",
                content: "各个版本ONNX模型效果对比(仅供参考) link notifications 以下测试结果均在自己构建测试集上评测所得，不代表在其他测试集上结果也是如此。 文本检测模型 link notifications 以下表格中推理时间是基于MacBook Pro M1运行所得，不同机器会有差别，请侧重查看彼此之间的比较。 评测采用的是TextDetMetric库 + 文本检测测试集，详情可以移步AI Studio运行查看。\n指标计算都是在以下参数下计算得来，差别仅在于模型文件不同。\npre_process: DetResizeForTest: limit_side_len: 736 limit_type: min NormalizeImage: std: [0.229, 0.224, 0.225] mean: [0.485, 0.456, 0.406] scale: 1./255. order: hwc ToCHWImage: KeepKeys: keep_keys: ['image', 'shape'] post_process: thresh: 0.3 box_thresh: 0.5 max_candidates: 1000 unclip_ratio: 1.6 use_dilation: true score_mode: \"fast\" 模型 模型大小 Precision Recall H-mean Speed(s/img) ch_PP-OCRv4_det_infer.onnx 4.5M 0.6958 0.8608 0.7696 0.6176 ch_PP-OCRv4_det_server_infer.onnx 108M 0.7070 0.9330 0.8044 13.9348 ch_PP-OCRv3_det_infer.onnx 2.3M 0.7056 0.8402 0.7671 0.4047 ch_PP-OCRv2_det_infer.onnx 2.2M 0.7850 0.8093 0.7970 0.3441 ch_ppocr_server_v2.0_det_infer.onnx 47M 0.6736 0.8402 0.7477 2.6560 文本识别模型 link 测试集: 自己构建中英文(168个) 输入Shape: v2: [3, 32, 320] v3~v4: [3, 48, 320] 模型 对应PaddleOCR分支 模型大小 Exact Match Char Match Score Speed(s/img) ch_PP-OCRv4_rec_infer.onnx release/v2.7 10M 0.5655 0.9261 0.7458 0.0218 ch_PP-OCRv4_rec_server_infer.onnx release/v2.7 86M 0.6310 0.9382 0.7846 0.1622 ch_PP-OCRv3_rec_infer.onnx release/v2.6 10M 0.5893 0.9209 0.7551 0.0183 ch_PP-OCRv2_rec_infer.onnx release/v2.3 8.0M 0.4881 0.9029 0.6955 0.0193 ch_ppocr_mobile_v2.0_rec_infer.onnx release/v2.0 4.3M 0.5595 0.8979 0.7287 0.0045 指标说明 link Exact Match (精确匹配准确率) Char Match (字符级准确率) Score(两者综合) $$ Exact\\ Match = \\frac{1}{N}\\sum_{i=0}^{N} s(p_{i}, g_{i}) $$\n$$ s(p_{i}, g_{i}) = \\begin{cases} 1 \u0026 \\text{if } p_{i} = g_{i} \\ 0 \u0026 \\text{otherwise } \\end{cases} $$\n$N$: 总的文本行个数 $p_{i}$: 第 $i$ 条文本行识别结果 $g_{i}$: 第 $i$ 条文本行对应的真实标签 $$ Char\\ Match = 1 - \\frac{1}{N} \\sum_{i=0}^{N} s(p_{i}, g_{i}) $$\n$$ s(p_{i}, g_{i}) = 1 - NL(p_{i}, g_{i}) $$\n$$ NL(p_{i}, g_{i}) = \\frac{Levenshtein(p_{i}, g_{i})}{\\max \\big(len(p_{i}), len(g_{i}) \\big)} $$\n$N$: 总的文本行个数 $p_{i}$: 第 $i$ 条文本行识别结果 $g_{i}$: 第 $i$ 条文本行对应的真实标签 $Levenshtein(x, y)$: 求字符串 $x$ 和字符串 $y$ 的编辑距离 $max(x, y)$: 求 $x$ 和 $y$ 的最大值 $len(x)$: 求所给字符串 $x$ 的长度 $$ Score = \\frac{1}{2}(Exact\\ Match + Char\\ Match) $$\n"
            }
        );
    index.add(
            {
                id:  28 ,
                href: "\/RapidOCRDocs\/docs\/about_model\/support_language\/",
                title: "支持识别语言",
                description: "简介 link 因为本项目依托于PaddleOCR，所以理论上PaddleOCR支持识别的模型，RapidOCR都是支持的。 中英文检测和识别（可以直接使用） link 因为中英文是最为常用的模型，所以在打包时，就默认将中英文识别的模型放到了rapidocr_onnxruntime和rapidocr_openvino中，直接pip安装即可使用。 其他语种检测和识别（需要转换） link PaddleOCR中已有文本检测模型列表：link PaddleOCR已有文本识别模型列表： link 除了slim量化版的模型，上面链接中的其他模型都可以转换为ONNX格式，通过RapidOCR快速部署。 转换教程 link",
                content: "简介 link 因为本项目依托于PaddleOCR，所以理论上PaddleOCR支持识别的模型，RapidOCR都是支持的。 中英文检测和识别（可以直接使用） link 因为中英文是最为常用的模型，所以在打包时，就默认将中英文识别的模型放到了rapidocr_onnxruntime和rapidocr_openvino中，直接pip安装即可使用。 其他语种检测和识别（需要转换） link PaddleOCR中已有文本检测模型列表：link PaddleOCR已有文本识别模型列表： link 除了slim量化版的模型，上面链接中的其他模型都可以转换为ONNX格式，通过RapidOCR快速部署。 "
            }
        );
    index.add(
            {
                id:  29 ,
                href: "\/RapidOCRDocs\/docs\/about_model\/convert_model\/",
                title: "转换Paddle模型为ONNX",
                description: " warning 不支持slim量化版的模型转换 简介 link Paddle格式模型的转换，主要借助paddle2onnx库实现。针对PaddleOCR中涉及到的相关模型，直接转换并不太方便。因此，推出了PaddleOCRModelConverter转换工具。 主要有两种使用方式： 方法一：在线转换，借助魔搭和Hugging Face两个平台，搭建在线转换demo； 方法二：离线转换，pip安装该工具，即可本地转换使用。 在线快速转换 link 魔搭 Hugging Face 离线转换 link",
                content: " warning 不支持slim量化版的模型转换 简介 link Paddle格式模型的转换，主要借助paddle2onnx库实现。针对PaddleOCR中涉及到的相关模型，直接转换并不太方便。因此，推出了PaddleOCRModelConverter转换工具。 主要有两种使用方式： 方法一：在线转换，借助魔搭和Hugging Face两个平台，搭建在线转换demo； 方法二：离线转换，pip安装该工具，即可本地转换使用。 在线快速转换 link 魔搭 Hugging Face 离线转换 link"
            }
        );
    index.add(
            {
                id:  30 ,
                href: "\/RapidOCRDocs\/docs\/related_projects\/",
                title: "相关项目",
                description: "",
                content: ""
            }
        );
    index.add(
            {
                id:  31 ,
                href: "\/RapidOCRDocs\/docs\/related_projects\/derivatives_projects\/",
                title: "衍生项目(偏工程)",
                description: "RapidStructure ：版面分析 link 含文本的图像方向分类 版面分析 表格还原 RapidOCRServer：RapidOCR HTTP服务/win32程序/易语言编写 linkPaddleOCRModelConvert： 模型自助转换 linkTextDetMetric：文本检测模型评估 linkRapidOCRPDF：解析PDF文件 linkRapidVideOCR：基于RapidOCR，提取视频中的硬字幕 link",
                content: "RapidStructure ：版面分析 link 含文本的图像方向分类 版面分析 表格还原 RapidOCRServer：RapidOCR HTTP服务/win32程序/易语言编写 linkPaddleOCRModelConvert： 模型自助转换 linkTextDetMetric：文本检测模型评估 linkRapidOCRPDF：解析PDF文件 linkRapidVideOCR：基于RapidOCR，提取视频中的硬字幕 link"
            }
        );
    index.add(
            {
                id:  32 ,
                href: "\/RapidOCRDocs\/docs\/related_projects\/related_projects\/",
                title: "垂直项目(偏学术)",
                description: " 以下几个方向，每个都是比较独立的方向，但是却和OCR有着千丝万缕的关系，关于它们的资料就像散落在天空中的星星一般，散发着微弱的光芒，这里要做的就是将这些点点光芒聚集起来。 这里将会汇总出以下几个OCR周边项目的一些文档和资源，包括学术动态和一些工程化代码。 欢迎各位小伙伴提供PR。 手写体识别 linkTODO\n手写体公式识别 linkTODO\n公式识别 linkTODO\n公式检测 link图像中公式检测需求一般出现于文档分析和还原需求中。\n单纯公式检测任务包括对行内公式和行间公式的检测。而版面分析任务中，仅有对行间公式的标注，缺乏行内公式标注。如果想要精细化做版面还原，行内公式的检测识别就变得尤为重要。\n这一块的工作，breezedeus做得比较好，详情可以参见其博客：Pix2Text (P2T) 新版公式检测模型。\n有关数据集：IBEM 和中文 CnMFD_Dataset\n发票识别 link CSIG 2022 Competition on Invoice Recognition and Analysis 图像文字擦除 link CTRNet：图像文字擦除 | Demo 文档增强 link DocDiff（Github）: 文档增强模型，可以用于文档去模糊、文档去噪、文档二值化、文档去水印和印章等任务。 文档图像矫正 link PaperEdge：文档图像矫正 | Demo DocTr++ | Demo | Code 版面分析 link 相关论文和帖子： 版面分析方法汇总 相关工程： PaddleOCR Layout 海康DAVAR VSR 数据集汇总： 英文版面分析数据集：\nPubLayNet: IBM构建，34万张图像，分为5类：text, title list table figure。 DocBank：微软亚洲研究院构建，50万英文文档图像，分为12类：摘要、作者、标题、公式、图形、页脚、列表、段落、参考、节标题、表格和文章标题。 中文版面分析数据集：\nCDLA：中文文档版面分析数据集，面向中文文献类（论文）场景，总共6000张（5000训练，1000测试），分为10类：正文、标题、图片、图片标题、表格、表格标题、页眉、页脚、注释和公式。 表格结构识别 link 相关论文和帖子： OCR之表格结构识别综述 合合信息：表格识别与内容提炼技术理解及研发趋势 论文阅读: （ICDAR2021 海康威视）LGPMA（表格识别算法）及官方源码对应解读 相关工程： 海康官方LGPMA源码 LGPMA Inference PaddleOCR Table 数据集汇总： 英文表格识别数据集： PubTabNet: IBM构建，568k+文档图像数据，包括表格图像和对应的HTML标注。 视频OCR link 相关论文和帖子： 【NeurIPS2021】A Bilingual, OpenWorld Video Text Dataset and End-to-end Video Text Spotter with Transformer | 博客解读 【ACM MM 2019】You only recognize once: Towards fast video text spotting 相关工程： video-subtitle-extractor: 一款将视频中的硬字幕提取为外挂字幕文件(srt格式)的软件 RapidVideOCR: 提取视频中硬字幕 数据集汇总： BOVText: A Large-Scale, Bilingual Open World Dataset for Video Text Spotting: 快手科技、浙江大学和北京邮电大学合作提出，大规模双语开放场景下的视频文本基准数据集，该数据集主要提供了2000+视频，1,750,000帧开放视频场景的视频。同时，还提供了丰富的标注类型（标题、字幕、场景文本等）。该数据集支持四个任务：视频帧检测、视频帧识别、视频文本跟踪和端到端视频文本识别。 卡证OCR link 相关论文和帖子： 相关工程： fake_certificate_generator: 假的证件合成器，包括身份证、驾驶证、营业执照。 数据集汇总： 暂无，一般这类数据较为敏感，通常都合成假数据来使用。 印章OCR link 相关论文和帖子： 【技术新趋势】合合信息：复杂环境下ocr与印章识别技术理解及研发趋势 基于文字分割的印章识别技术 相关工程： JS生成印章 Python绘制透明背景印章 在线印章合成大全网站 数据集汇总： 来自DocDiff ",
                content: " 以下几个方向，每个都是比较独立的方向，但是却和OCR有着千丝万缕的关系，关于它们的资料就像散落在天空中的星星一般，散发着微弱的光芒，这里要做的就是将这些点点光芒聚集起来。 这里将会汇总出以下几个OCR周边项目的一些文档和资源，包括学术动态和一些工程化代码。 欢迎各位小伙伴提供PR。 手写体识别 linkTODO\n手写体公式识别 linkTODO\n公式识别 linkTODO\n公式检测 link图像中公式检测需求一般出现于文档分析和还原需求中。\n单纯公式检测任务包括对行内公式和行间公式的检测。而版面分析任务中，仅有对行间公式的标注，缺乏行内公式标注。如果想要精细化做版面还原，行内公式的检测识别就变得尤为重要。\n这一块的工作，breezedeus做得比较好，详情可以参见其博客：Pix2Text (P2T) 新版公式检测模型。\n有关数据集：IBEM 和中文 CnMFD_Dataset\n发票识别 link CSIG 2022 Competition on Invoice Recognition and Analysis 图像文字擦除 link CTRNet：图像文字擦除 | Demo 文档增强 link DocDiff（Github）: 文档增强模型，可以用于文档去模糊、文档去噪、文档二值化、文档去水印和印章等任务。 文档图像矫正 link PaperEdge：文档图像矫正 | Demo DocTr++ | Demo | Code 版面分析 link 相关论文和帖子： 版面分析方法汇总 相关工程： PaddleOCR Layout 海康DAVAR VSR 数据集汇总： 英文版面分析数据集：\nPubLayNet: IBM构建，34万张图像，分为5类：text, title list table figure。 DocBank：微软亚洲研究院构建，50万英文文档图像，分为12类：摘要、作者、标题、公式、图形、页脚、列表、段落、参考、节标题、表格和文章标题。 中文版面分析数据集：\nCDLA：中文文档版面分析数据集，面向中文文献类（论文）场景，总共6000张（5000训练，1000测试），分为10类：正文、标题、图片、图片标题、表格、表格标题、页眉、页脚、注释和公式。 表格结构识别 link 相关论文和帖子： OCR之表格结构识别综述 合合信息：表格识别与内容提炼技术理解及研发趋势 论文阅读: （ICDAR2021 海康威视）LGPMA（表格识别算法）及官方源码对应解读 相关工程： 海康官方LGPMA源码 LGPMA Inference PaddleOCR Table 数据集汇总： 英文表格识别数据集： PubTabNet: IBM构建，568k+文档图像数据，包括表格图像和对应的HTML标注。 视频OCR link 相关论文和帖子： 【NeurIPS2021】A Bilingual, OpenWorld Video Text Dataset and End-to-end Video Text Spotter with Transformer | 博客解读 【ACM MM 2019】You only recognize once: Towards fast video text spotting 相关工程： video-subtitle-extractor: 一款将视频中的硬字幕提取为外挂字幕文件(srt格式)的软件 RapidVideOCR: 提取视频中硬字幕 数据集汇总： BOVText: A Large-Scale, Bilingual Open World Dataset for Video Text Spotting: 快手科技、浙江大学和北京邮电大学合作提出，大规模双语开放场景下的视频文本基准数据集，该数据集主要提供了2000+视频，1,750,000帧开放视频场景的视频。同时，还提供了丰富的标注类型（标题、字幕、场景文本等）。该数据集支持四个任务：视频帧检测、视频帧识别、视频文本跟踪和端到端视频文本识别。 卡证OCR link 相关论文和帖子： 相关工程： fake_certificate_generator: 假的证件合成器，包括身份证、驾驶证、营业执照。 数据集汇总： 暂无，一般这类数据较为敏感，通常都合成假数据来使用。 印章OCR link 相关论文和帖子： 【技术新趋势】合合信息：复杂环境下ocr与印章识别技术理解及研发趋势 基于文字分割的印章识别技术 相关工程： JS生成印章 Python绘制透明背景印章 在线印章合成大全网站 数据集汇总： 来自DocDiff "
            }
        );
    index.add(
            {
                id:  33 ,
                href: "\/RapidOCRDocs\/docs\/faq\/",
                title: "常见问题 (FAQ)",
                description: "Q: 为什么我的模型在GPU上比在CPU上还要慢？ linkA: : 取决于所使用的执行提供者，它可能没有完全支持模型中的所有操作。回落到CPU操作可能会导致性能速度的下降。此外，即使一个操作是由CUDA execution provider实现的，由于性能的原因，它也不一定会把操作分配/放置到CUDA EP上。要想看到ORT决定的位置，请打开verbose日志并查看控制台的输出。\nQ: 请问这个能在32位C#中用嘛? linkA: C#可以32位，要用32位的dll，但nuget上的onnxruntime不支持win7。\nQ: Windows系统下，装完环境之后，运行示例程序之后，报错OSError: [WinError 126] 找不到指定的模組 linkA: 原因是Shapely库没有正确安装，如果是在Windows，可以在Shapely whl下载对应的whl包，离线安装即可；另外一种解决办法是用conda安装也可。\nQ: Linux部署python的程序时，import cv2时会报ImportError: ligGL.so.1: cannot open shared object file: No such file or directory? linkA: 解决方法 有两个(来自群友ddeef)：\n安装opencv-python-headless取代opencv-python; 运行sudo apt-get install -y libgl1-mesa-dev Q: 询问下，我编译出来的进程在win7下面通过cmd调用，发生了崩溃的情况? linkA: 不支持win7 (by @如果我有時光機)\nQ: 能不能搞个openmmlab类似的那个提取信息的? linkA: 这个目前正在调研测试当中，如果mmocr中关键信息提取效果还可以，后期会考虑整合进来。\nQ: RapidOCR和PaddleOCR是什么关系呢？ linkA: RapidOCR是将PaddleOCR的预训练模型转为onnx模型，不依赖paddle框架，方便各个平台部署。\nQ: onnxruntime arm32 有人编译过吗？ 我编译成功了，但是使用的时候libonnxruntime.so👎 error: file not recognized: File format not recognized 应该是版本不匹配 linkA: 没遇到过。我是直接在当前平台编译的，我们用的是arm。估计是平台不兼容,建议在本身平台上编译。没遇到过问题。通常出在交叉编译方式下。",
                content: "Q: 为什么我的模型在GPU上比在CPU上还要慢？ linkA: : 取决于所使用的执行提供者，它可能没有完全支持模型中的所有操作。回落到CPU操作可能会导致性能速度的下降。此外，即使一个操作是由CUDA execution provider实现的，由于性能的原因，它也不一定会把操作分配/放置到CUDA EP上。要想看到ORT决定的位置，请打开verbose日志并查看控制台的输出。\nQ: 请问这个能在32位C#中用嘛? linkA: C#可以32位，要用32位的dll，但nuget上的onnxruntime不支持win7。\nQ: Windows系统下，装完环境之后，运行示例程序之后，报错OSError: [WinError 126] 找不到指定的模組 linkA: 原因是Shapely库没有正确安装，如果是在Windows，可以在Shapely whl下载对应的whl包，离线安装即可；另外一种解决办法是用conda安装也可。\nQ: Linux部署python的程序时，import cv2时会报ImportError: ligGL.so.1: cannot open shared object file: No such file or directory? linkA: 解决方法 有两个(来自群友ddeef)：\n安装opencv-python-headless取代opencv-python; 运行sudo apt-get install -y libgl1-mesa-dev Q: 询问下，我编译出来的进程在win7下面通过cmd调用，发生了崩溃的情况? linkA: 不支持win7 (by @如果我有時光機)\nQ: 能不能搞个openmmlab类似的那个提取信息的? linkA: 这个目前正在调研测试当中，如果mmocr中关键信息提取效果还可以，后期会考虑整合进来。\nQ: RapidOCR和PaddleOCR是什么关系呢？ linkA: RapidOCR是将PaddleOCR的预训练模型转为onnx模型，不依赖paddle框架，方便各个平台部署。\nQ: onnxruntime arm32 有人编译过吗？ 我编译成功了，但是使用的时候libonnxruntime.so👎 error: file not recognized: File format not recognized 应该是版本不匹配 linkA: 没遇到过。我是直接在当前平台编译的，我们用的是arm。估计是平台不兼容,建议在本身平台上编译。没遇到过问题。通常出在交叉编译方式下。\nQ: 请问一下c++ demo必须要vs2017及以上版本吗? linkA: 最好用vs2019\nQ: 可以达到百度EasyEdge Free App的效果吗？ linkA: edge的模型应该没有开源。百度开源的模型里server det的识别效果可以达到，但是模型比较大。\nQ: 我用c++推理onnx貌似是cpu推理的，gpu没有反应? linkA: 如果想用GPU的话，需要安装onnxruntime-gpu版，自己在onnxruntime的代码中添加EP (execution provider)。我们的定位是通用，只用cpu推理。\nQ: 您好，我想部署下咱们的ocr识别，有提供linux版本的ocr部署包吗? linkA: linux版本的自己编译即可, 可以参考我们的action中的脚本；其实编译非常容易，安装个opencv后，在cmakelists.txt中修改一下onnxruntime的路径即可，具体参考这个： https://github.com/RapidOCR/RapidOCR/blob/main/.github/workflows/make-linux.yml\nQ: onnxruntime编译好的C++库，哪里可以下载到？ linkA: 从这里：https://github.com/RapidOCR/OnnxruntimeBuilder/releases/tag/1.7.0\nQ: 目前简单测试环境是 Win10 + Cygwin + gcc + 纯C编程，可以在C程序中直接接入简单OCR功能吗？ linkA: 直接使用API就行，API就是由c导出的\nQ: 模型下载地址 linkA: 百度网盘 | Google Drive\nQ: onnxruntime 1.7 下出错：onnxruntime::SequentialExecutor::Execute] Non-zero status code returned while running ScatterND node. Name:‘ScatterND@1’ Status Message: updates linkA: 由于模型只支持onnxruntime=1.5.0导致，请更新模型,下载地址见Q3\nQ: 边缘总有一行文字无法识别，怎么办？ linkA: 在 padding 参数中添加一个值 ，默认是0,你可以添加5或10, 甚至更大，直到能识别为止。注意不要添加过大，会浪费内存。\n"
            }
        );
    index.add(
            {
                id:  34 ,
                href: "\/RapidOCRDocs\/docs\/blog\/",
                title: "博客",
                description: "",
                content: ""
            }
        );
    index.add(
            {
                id:  35 ,
                href: "\/RapidOCRDocs\/docs\/blog\/01_optim_tutorial\/",
                title: "调优尝试教程",
                description: "notifications 以下尝试情况，均已经在在线demo中实现，看完之后，可移步那里去尝试。 引言 link 由于小伙伴们使用OCR的场景多种多样，单一的参数配置往往不能满足要求，这就涉及到基于现有模型，通过调节参数来达到正确识别的目的。 基本的原则是尽量不去动模型内部，降低使用成本。 本篇文章就来说说在识别效果不好时，如何去调优。 因此博客为一家之言，难免会挂一漏万，希望小伙伴多多指出，共同维护这份教程。 常见错例种类 link本地使用过程中，识别结果： 个别字丢失 个别字识别错误 个别字丢失调优篇 link 查看图像是否shape太小，导致文本检测丢失。 对于长度较长，高度较小的图像，可尝试对该图像高度做上下补充，来减小文字在原始图像中比例，利于文本检测。类似下图这种，左侧一条为原始图像，右侧为上下补边的图像。 padding代码参考： from typing import Tuple import cv2 import numpy as np def padding_img(img: np.ndarray, padding_value: Tuple[int, int, int, int], padding_color: Tuple = (0, 0, 0)) -\u003e np.ndarray: padded_img = cv2.copyMakeBorder(img, padding_value[0], padding_value[1], padding_value[2], padding_value[3], cv2.BORDER_CONSTANT, value=padding_color) return padded_img img = cv2.imread('xxx.jpg') # padding_value: (top, bottom, left, right) # 对该图像上下各补充10像素的白边 padded_img = padding_img(img, (10, 10, 0, 0), (255, 255, 255)) 将padding之后的图像再次送入RapidOCR中尝试，查看是否仍然出现上述问题。 将该图像上传到在线demo中，查看能否复现问题？",
                content: " notifications 以下尝试情况，均已经在在线demo中实现，看完之后，可移步那里去尝试。\n引言 link 由于小伙伴们使用OCR的场景多种多样，单一的参数配置往往不能满足要求，这就涉及到基于现有模型，通过调节参数来达到正确识别的目的。 基本的原则是尽量不去动模型内部，降低使用成本。 本篇文章就来说说在识别效果不好时，如何去调优。 因此博客为一家之言，难免会挂一漏万，希望小伙伴多多指出，共同维护这份教程。 常见错例种类 link本地使用过程中，识别结果：\n个别字丢失 个别字识别错误 个别字丢失调优篇 link 查看图像是否shape太小，导致文本检测丢失。\n对于长度较长，高度较小的图像，可尝试对该图像高度做上下补充，来减小文字在原始图像中比例，利于文本检测。类似下图这种，左侧一条为原始图像，右侧为上下补边的图像。 padding代码参考： from typing import Tuple import cv2 import numpy as np def padding_img(img: np.ndarray, padding_value: Tuple[int, int, int, int], padding_color: Tuple = (0, 0, 0)) -\u003e np.ndarray: padded_img = cv2.copyMakeBorder(img, padding_value[0], padding_value[1], padding_value[2], padding_value[3], cv2.BORDER_CONSTANT, value=padding_color) return padded_img img = cv2.imread('xxx.jpg') # padding_value: (top, bottom, left, right) # 对该图像上下各补充10像素的白边 padded_img = padding_img(img, (10, 10, 0, 0), (255, 255, 255)) 将padding之后的图像再次送入RapidOCR中尝试，查看是否仍然出现上述问题。 将该图像上传到在线demo中，查看能否复现问题？\n如不能复现，着重比对环境是否与在线demo中相关包使用版本不一致情况？ 在线demo所用的各个包版本情况： Python: 3.8 onnxruntime: 1.14.1 rapidocr_onnxruntime: 1.2.5 如能复现，尝试调节在线demo中的三个参数，注意控制变量调节参数\n首先调节box_thresh参数，该参数用来控制文本检测部分检测所得框是文本的概率。个别字丢失，一般是单独的字丢失，很大可能是文本检测模型没有检测到该独立的文字。尝试调低box_thresh值，查看是否可以检出丢失的文字。（没有找到合适的例子） 固定box_thresh，调节text_score参数。该参数是控制识别文本结果正确的概率。尝试调低text_score值，查看是否可以识别出丢失的文字。 固定box_thresh和text_score两个参数，调节unclip_ratio参数。该参数用来控制文本检测所得文本框的大小。尝试调大unclip_ratio值，查看是否可以识别出丢失的文字。 如果调节三个参数也不能解决问题，只能尝试server版的文本检测和文本识别模型了。\n首先更换server版的文本检测模型，查看是否解决问题 在第1步基础上，更换server版的文本识别模型，查看是否解决问题 尝试更换不同版本模型，来查看效果。具体可在在线demo中尝试\n个别字识别错误调优篇 link个别字错误的情况，例如：成识别为戍，这种一般是文本识别模型的问题。\n情况一：轻量中英文模型识别对个别汉字识别错误 link 尝试padding图像，再重新识别 更换不同版本的识别模型，包括v2、v3和server版尝试 情况二：轻量中英文模型对个别英文或数字识别错误 link 更换不同版本的识别模型，包括v2、v3和server版尝试 如果是只识别英文单词和数字，可以更换英文和数字专有模型（en_PP-OCRv3_rec_infer.onnx和en_number_mobile_v2.0_rec_infer.onnx） "
            }
        );
    index.add(
            {
                id:  36 ,
                href: "\/RapidOCRDocs\/docs\/blog\/02_config_parameter\/",
                title: "config.yaml参数解释",
                description: "config.yaml源码 link 详情 Global: text_score: 0.5 use_det: true use_cls: true use_rec: true print_verbose: false min_height: 30 width_height_ratio: 8 Det: use_cuda: false model_path: models/ch_PP-OCRv4_det_infer.onnx limit_side_len: 736 limit_type: min thresh: 0.3 box_thresh: 0.5 max_candidates: 1000 unclip_ratio: 1.6 use_dilation: true score_mode: fast Cls: use_cuda: false model_path: models/ch_ppocr_mobile_v2.0_cls_infer.onnx cls_image_shape: [3, 48, 192] cls_batch_num: 6 cls_thresh: 0.9 label_list: ['0', '180'] Rec: use_cuda: false model_path: models/ch_PP-OCRv4_rec_infer.onnx rec_img_shape: [3, 48, 320] rec_batch_num: 6 Global部分 link 参数名称 取值范围 默认值 作用 text_score [0, 1] 0.",
                content: "config.yaml源码 link 详情 Global: text_score: 0.5 use_det: true use_cls: true use_rec: true print_verbose: false min_height: 30 width_height_ratio: 8 Det: use_cuda: false model_path: models/ch_PP-OCRv4_det_infer.onnx limit_side_len: 736 limit_type: min thresh: 0.3 box_thresh: 0.5 max_candidates: 1000 unclip_ratio: 1.6 use_dilation: true score_mode: fast Cls: use_cuda: false model_path: models/ch_ppocr_mobile_v2.0_cls_infer.onnx cls_image_shape: [3, 48, 192] cls_batch_num: 6 cls_thresh: 0.9 label_list: ['0', '180'] Rec: use_cuda: false model_path: models/ch_PP-OCRv4_rec_infer.onnx rec_img_shape: [3, 48, 320] rec_batch_num: 6 Global部分 link 参数名称 取值范围 默认值 作用 text_score [0, 1] 0.5 文本识别结果置信度，值越大，把握越大 use_angle_cls bool true 是否使用文本行的方向分类 print_verbose bool true 是否打印各个部分耗时信息 min_height int 30 图像最小高度（单位是像素）低于这个值，会跳过文本检测阶段，直接进行后续识别 width_height_ratio int 8 如果输入图像的宽高比大于width_height_ratio，则会跳过文本检测，直接进行后续识别width_height_ratio=-1：不用这个参数 min_height是用来过滤只有一行文本的图像（如下图），这类图像不会进入文本检测模块，直接进入后续过程。\nDet部分 link 参数名称 取值范围 默认值 作用 use_cuda bool false 是否使用CUDA，加速推理 limit_side_len - 736 限制图像边的长度的像素值 limit_type [min, max] min 限制图像的最小边长度还是最大边为limit_side_len 示例解释：当limit_type=min和limit_side_len=736时，图像最小边小于736时，会将图像最小边拉伸到736，另一边则按图像原始比例等比缩放。 thresh [0, 1] 0.3 图像中文字部分和背景部分分割阈值值越大，文字部分会越小 box_thresh [0, 1] 0.5 文本检测所得框是否保留的阈值，值越大，召回率越低 max_candidates - 1000 图像中最大可检测到的文本框数目，一般够用 unclip_ratio [1.6, 2.0] 1.6 控制文本检测框的大小，值越大，检测框整体越大 use_dilation bool true 是否使用形态学中的膨胀操作，一般采用默认值即可 score_mode string fast fast是求rectangle区域的平均分数，容易造成弯曲文本漏检，slow是求polygon区域的平均分数，会更准确，但速度有所降低，可按需选择 Cls部分 link 参数名称 取值范围 默认值 作用 cls_img_shape - [3, 48, 192] 输入方向分类模型的图像Shape（CHW） cls_batch_num - 6 批次推理的batch大小，一般采用默认值即可，太大并没有明显提速，效果还可能会差 cls_thresh [0, 1] 0.9 方向分类结果的置信度 label_list - [0, 180] 方向分类的标签，0°或者180°，该参数不能动 Rec部分 link 参数名称 取值范围 默认值 作用 rec_img_shape - [3, 48, 320] 输入文本识别模型的图像Shape（CHW） rec_batch_num - 6 批次推理的batch大小，一般采用默认值即可，太大并没有明显提速，效果还可能会差 "
            }
        );
    index.add(
            {
                id:  37 ,
                href: "\/RapidOCRDocs\/docs\/blog\/03_which_inference\/",
                title: "选择哪个推理引擎？",
                description: " warning openvino存在内存不释放的问题，参见issue #11939\n推理引擎 推理速度更快 占用内存更少 rapidocr_onnxruntime ✓ rapidocr_openvino ✓ ",
                content: " warning openvino存在内存不释放的问题，参见issue #11939\n推理引擎 推理速度更快 占用内存更少 rapidocr_onnxruntime ✓ rapidocr_openvino ✓ "
            }
        );
    index.add(
            {
                id:  38 ,
                href: "\/RapidOCRDocs\/docs\/blog\/04_inference_summary\/",
                title: "推理引擎汇总",
                description: "warning Caution - This documentation is in progress 引言 link 关于模型的推理框架有很多，包括PC/移动端等等。之前在老潘的个人博客里看到过相关介绍 我在这里做一个简单汇总。但更侧重于寻找一个在GPU上，可以支持动态输入且在GPU上更快，轻量的推理引擎。 目前已知推理引擎 link CPU端：ONNXruntime、OpenVINO、libtorch、Caffe、PaddleInference GPU端：TensorRT、OpenPPL、AITemplate 移动端：NCNN，MNN, Paddle-Lite 通吃：TVM、OpenPPL ONNXRuntime（微软） link 目前仓库中已经在使用的推理引擎，CPU端最好用的轻量推理引擎。支持动态输入。 目前在GPU端，动态输入的情况下，速度比CPU上还要慢一些，暂时尚未解决。 ONNXRuntime + TensorRT结合 → 尝试但未跑通 OpenVINO（英特尔） link CPU端推理速度更快，支持动态输入。但是占用内存较大，拿空间换了时间。 当自己资源不吃紧时，但要求更快地推理速度时，可以考虑用这个。 GPU端仅支持自家显卡，暂时用不到。 MNN（阿里） link GPU端没有找到容易的使用方式，需要自行编译，门槛太高。理想情况是像onnxruntime-gpu这种，可以快速安装使用。 说是支持动态输入，但是尚未找到有效验证方法。 TensorRT（英伟达） link GPU端快速推理，占坑 据说存在内存泄漏的bug，暂时没有尝试。 NCNN（腾讯） link 移动端比较好用的 存在一个问题：已有模型转换为NCNN格式，会遇到某些算子不支持情况 Paddle Inference（百度） link 定位是服务端推理框架 依赖Paddle框架，有些重，但是不失为GPU上推理模型的一个选择。 目前已经采用，对应rapidocr_paddle库，用以弥补GPU推理的短板。 Paddle Lite link Paddle Lite 是一组工具，可帮助开发者在移动设备、嵌入式设备和 loT 设备上运行模型，以便实现设备端机器学习。 定位是移动端和边缘端推理引擎 Paddle.js link网页前端推理引擎\nFastDeploy（百度） linkFastDeploy是一款全场景、易用灵活、极致高效的AI推理部署工具， 支持云边端部署。提供超过 🔥160+ Text，Vision， Speech和跨模态模型📦开箱即用的部署体验，并实现🔚端到端的推理性能优化。包括 物体检测、字符识别（OCR）、人脸、人像扣图、多目标跟踪系统、NLP、Stable Diffusion文图生成、TTS 等几十种任务场景，满足开发者多场景、多硬件、多平台的产业部署需求。",
                content: " warning Caution - This documentation is in progress 引言 link 关于模型的推理框架有很多，包括PC/移动端等等。之前在老潘的个人博客里看到过相关介绍 我在这里做一个简单汇总。但更侧重于寻找一个在GPU上，可以支持动态输入且在GPU上更快，轻量的推理引擎。 目前已知推理引擎 link CPU端：ONNXruntime、OpenVINO、libtorch、Caffe、PaddleInference GPU端：TensorRT、OpenPPL、AITemplate 移动端：NCNN，MNN, Paddle-Lite 通吃：TVM、OpenPPL ONNXRuntime（微软） link 目前仓库中已经在使用的推理引擎，CPU端最好用的轻量推理引擎。支持动态输入。 目前在GPU端，动态输入的情况下，速度比CPU上还要慢一些，暂时尚未解决。 ONNXRuntime + TensorRT结合 → 尝试但未跑通 OpenVINO（英特尔） link CPU端推理速度更快，支持动态输入。但是占用内存较大，拿空间换了时间。 当自己资源不吃紧时，但要求更快地推理速度时，可以考虑用这个。 GPU端仅支持自家显卡，暂时用不到。 MNN（阿里） link GPU端没有找到容易的使用方式，需要自行编译，门槛太高。理想情况是像onnxruntime-gpu这种，可以快速安装使用。 说是支持动态输入，但是尚未找到有效验证方法。 TensorRT（英伟达） link GPU端快速推理，占坑 据说存在内存泄漏的bug，暂时没有尝试。 NCNN（腾讯） link 移动端比较好用的 存在一个问题：已有模型转换为NCNN格式，会遇到某些算子不支持情况 Paddle Inference（百度） link 定位是服务端推理框架 依赖Paddle框架，有些重，但是不失为GPU上推理模型的一个选择。 目前已经采用，对应rapidocr_paddle库，用以弥补GPU推理的短板。 Paddle Lite link Paddle Lite 是一组工具，可帮助开发者在移动设备、嵌入式设备和 loT 设备上运行模型，以便实现设备端机器学习。 定位是移动端和边缘端推理引擎 Paddle.js link网页前端推理引擎\nFastDeploy（百度） linkFastDeploy是一款全场景、易用灵活、极致高效的AI推理部署工具， 支持云边端部署。提供超过 🔥160+ Text，Vision， Speech和跨模态模型📦开箱即用的部署体验，并实现🔚端到端的推理性能优化。包括 物体检测、字符识别（OCR）、人脸、人像扣图、多目标跟踪系统、NLP、Stable Diffusion文图生成、TTS 等几十种任务场景，满足开发者多场景、多硬件、多平台的产业部署需求。\n总结来说就是，将各个场景下的推理引擎做了集成，更加方便易用，大而全。\nPaddleX linkPaddleX 集成飞桨智能视觉领域图像分类、目标检测、语义分割、实例分割任务能力，将深度学习开发全流程从数据准备、模型训练与优化到多端部署端到端打通，并提供统一任务API接口及图形化开发界面Demo。开发者无需分别安装不同套件，以低代码的形式即可快速完成飞桨全流程开发。\n总结来说，PaddleX就是一个整合已有模型的低代码平台。严格意义来说，不算一个推理引擎。\n"
            }
        );
    index.add(
            {
                id:  39 ,
                href: "\/RapidOCRDocs\/docs\/blog\/05_rec_dict_onnx\/",
                title: "关于识别模型中字典的读写",
                description: "引言 link在文本识别时，识别的每一种语言，都有一个对应的字典，用来还原识别的文本内容。例如英文识别模型的字典就是26个英文字母的大小写以及常用符号，中文识别模型的字典一般包括常用汉字、字母和符号等。\n受启发于issue #42，目前基于ONNXRuntime的推理引擎rapidocr_onnxruntime库已经将字典写入到onnx模型中，无需额外指定字典TXT文件。\n以下将对这一部分做详细讲解，感兴趣小伙伴，可自行取用。\n将字典内容写入到ONNX中 link notifications 在PaddleOCRModelConvert工具中已经将上述操作写到了包中，使用该工具可自动将字典写入到ONNX中。源码位于：link\nimport onnx model = onnx.load_model('/path/to/model.onnx') # 添加dictionary对应的值 meta = model.metadata_props.add() meta.key = 'dictionary' meta.value = open('/path/to/ppocr_keys_v1.txt', 'r', -1, 'u8').read() # 添加shape对应的值 meta = model.metadata_props.add() meta.key = 'shape' meta.value = '[3,48,320]' onnx.save_model(model, '/path/to/model.onnx') 获取字典内容 link notifications 该部分已经在rapidocr_onnxruntime上实现，详情参见：link\nimport json import onnxruntime as ort sess = ort.InferenceSession('/path/to/model.onnx') metamap = sess.get_modelmeta().custom_metadata_map # 读取dictionary键对应的值 chars = metamap['dictionary'].splitlines() # 读取shape键对应的值 input_shape = json.loads(metamap['shape']) ",
                content: "引言 link在文本识别时，识别的每一种语言，都有一个对应的字典，用来还原识别的文本内容。例如英文识别模型的字典就是26个英文字母的大小写以及常用符号，中文识别模型的字典一般包括常用汉字、字母和符号等。\n受启发于issue #42，目前基于ONNXRuntime的推理引擎rapidocr_onnxruntime库已经将字典写入到onnx模型中，无需额外指定字典TXT文件。\n以下将对这一部分做详细讲解，感兴趣小伙伴，可自行取用。\n将字典内容写入到ONNX中 link notifications 在PaddleOCRModelConvert工具中已经将上述操作写到了包中，使用该工具可自动将字典写入到ONNX中。源码位于：link\nimport onnx model = onnx.load_model('/path/to/model.onnx') # 添加dictionary对应的值 meta = model.metadata_props.add() meta.key = 'dictionary' meta.value = open('/path/to/ppocr_keys_v1.txt', 'r', -1, 'u8').read() # 添加shape对应的值 meta = model.metadata_props.add() meta.key = 'shape' meta.value = '[3,48,320]' onnx.save_model(model, '/path/to/model.onnx') 获取字典内容 link notifications 该部分已经在rapidocr_onnxruntime上实现，详情参见：link\nimport json import onnxruntime as ort sess = ort.InferenceSession('/path/to/model.onnx') metamap = sess.get_modelmeta().custom_metadata_map # 读取dictionary键对应的值 chars = metamap['dictionary'].splitlines() # 读取shape键对应的值 input_shape = json.loads(metamap['shape']) "
            }
        );
    index.add(
            {
                id:  40 ,
                href: "\/RapidOCRDocs\/docs\/blog\/06_custom_different_model\/",
                title: "如何更换其他检测和识别模型？",
                description: "引言 linkrapidocr系列库中默认打包了轻量版的中英文检测和识别模型，这种配置可以覆盖到大部分场景。但是也总会有一些其他场景，要用到其他检测和识别模型。\n这一点，在设计接口时，已经做了考虑，留出了接口，只是没有专门博客来介绍这个事情。\n这个博客就是以如何更换rapidocr_onnxruntime的识别模型为英文和数字的识别模型为例做讲解。其他模型同理。\nnotifications 检测模型，对应模型路径参数为det_model_path识别模型，对应模型路径参数为rec_model_path。 详细说明参见：link\n1. 安装rapidocr_onnxruntime link请先根据教程，装好rapidocr_onnxruntime库，具体可参考：link\n2. 获得英文和数字的ONNX识别模型 link模型地址: https://paddleocr.bj.bcebos.com/PP-OCRv4/english/en_PP-OCRv4_rec_infer.tar\n字典地址: https://raw.githubusercontent.com/PaddlePaddle/PaddleOCR/release/2.7/ppocr/utils/en_dict.txt\n基于PaddleOCRModelConvert工具在线转换，得到en_PP-OCRv4_rec_infer.onnx模型\n3. 使用该模型 link from rapidocr_onnxruntime import RapidOCR model = RapidOCR(rec_model_path=\"en_PP-OCRv4_rec_infer.onnx\") img_path = \"1.png\" result, elapse = model(img_path) print(result) print(elapse) ",
                content: "引言 linkrapidocr系列库中默认打包了轻量版的中英文检测和识别模型，这种配置可以覆盖到大部分场景。但是也总会有一些其他场景，要用到其他检测和识别模型。\n这一点，在设计接口时，已经做了考虑，留出了接口，只是没有专门博客来介绍这个事情。\n这个博客就是以如何更换rapidocr_onnxruntime的识别模型为英文和数字的识别模型为例做讲解。其他模型同理。\nnotifications 检测模型，对应模型路径参数为det_model_path识别模型，对应模型路径参数为rec_model_path。 详细说明参见："
            }
        );
    index.add(
            {
                id:  41 ,
                href: "\/RapidOCRDocs\/docs\/communicate\/",
                title: "交流群",
                description: "可通过以下方式与RapidOCR维护者SWHL进行沟通，也欢迎反馈使用过程中遇到的问题。\n知识星球RapidAI私享群 link这里的提问会优先得到回答和支持，也会享受到RapidAI组织后续持续优质的服务，欢迎大家的加入。\n微信交流群 link微信扫描以下二维码，关注RapidAI公众号，回复OCR即可加入RapidOCR微信交流群：\nQQ交流群 link欢迎加入我们的QQ群下载模型及测试程序。1群：887298230 已满，2群：755960114，3群：450338158， 4群：419196348\n(推荐) 加入QQ频道 link ",
                content: "可通过以下方式与RapidOCR维护者SWHL进行沟通，也欢迎反馈使用过程中遇到的问题。\n知识星球RapidAI私享群 link这里的提问会优先得到回答和支持，也会享受到RapidAI组织后续持续优质的服务，欢迎大家的加入。\n微信交流群 link微信扫描以下二维码，关注RapidAI公众号，回复OCR即可加入RapidOCR微信交流群：\nQQ交流群 link欢迎加入我们的QQ群下载模型及测试程序。1群：887298230 已满，2群：755960114，3群：450338158， 4群：419196348\n(推荐) 加入QQ频道 link "
            }
        );
    index.add(
            {
                id:  42 ,
                href: "\/RapidOCRDocs\/docs\/sponsor\/",
                title: "给作者加油",
                description: "写在前面 linkI like open source and AI technology because I think open source and AI will bring convenience and help to people in need, and will also make the world a better place. By donating to these projects, you can join me in making AI bring warmth and beauty to more people.\n我喜欢开源，喜欢AI技术，因为我认为开源和AI会为有需要的人带来方便和帮助，也会让这个世界变得更好。通过对这些项目的捐赠，您可以和我一道让AI为更多人带来温暖和美好。\n知识星球RapidAI私享群 link这里的提问会优先得到回答和支持，也会享受到RapidAI组织后续持续优质的服务，欢迎大家的加入。\n支付宝或微信打赏 (Alipay reward or WeChat reward) link通过支付宝或者微信给作者打赏，请写好备注。 Give the author a reward through Alipay or WeChat.",
                content: "写在前面 linkI like open source and AI technology because I think open source and AI will bring convenience and help to people in need, and will also make the world a better place. By donating to these projects, you can join me in making AI bring warmth and beauty to more people.\n我喜欢开源，喜欢AI技术，因为我认为开源和AI会为有需要的人带来方便和帮助，也会让这个世界变得更好。通过对这些项目的捐赠，您可以和我一道让AI为更多人带来温暖和美好。\n知识星球RapidAI私享群 link这里的提问会优先得到回答和支持，也会享受到RapidAI组织后续持续优质的服务，欢迎大家的加入。\n支付宝或微信打赏 (Alipay reward or WeChat reward) link通过支付宝或者微信给作者打赏，请写好备注。 Give the author a reward through Alipay or WeChat.\nBuy me a Coffee linkIf you are not in mainland China, you can also support the author through:\n"
            }
        );
    index.add(
            {
                id:  43 ,
                href: "\/RapidOCRDocs\/docs\/changelog\/",
                title: "更新日志",
                description: "",
                content: ""
            }
        );
    index.add(
            {
                id:  44 ,
                href: "\/RapidOCRDocs\/docs\/changelog\/rapidocr\/",
                title: "rapidocr_onnxruntime/openvino",
                description: "🥰2023-12-28 v1.3.9 update: link 优化rapidocr系列库主函数代码逻辑，便于小伙伴们二次开发 Merge PR #141 by theikkila Merge PR #139 by debanjum 😜2023-10-25 v1.3.8 update: link 修复issue #133 📡2023-09-21 v1.3.7 update: link 完善VisRes类在终端情况下的使用 修复auto_text_det的条件错误 🧸2023-09-20 v1.3.6 update: link 添加VisRes类，便于快速可视化结果。详情参见demo.py用法 😀2023-09-20 v1.3.5 update: link Fixed issue #122 ⏰2023-09-18 v1.3.4 update: link 优化更新参数部分的函数实现 🧸2023-09-06 v1.3.2 update: link 修复issue #116 ⭐2023-08-29 v1.3.1 update: link 修复issue #115 🎉2023-08-26 v1.3.0 update: link 将PaddleOCR v4版对应的文本检测和文本识别轻量模型转换为onnx，并打包到whl中。 接口与v1.2.x一致，直接使用即可。 😉2023-07-12 v1.2.12 update: link 在rapidocr_onnxruntime初始化时，添加det_use_cuda、cls_use_cuda、rec_use_cuda参数 兼容配置文件方式传入RapidOCR类中 rapidocr_openvino同理 🎮2023-03-11 v1.",
                content: "🥰2023-12-28 v1.3.9 update: link 优化rapidocr系列库主函数代码逻辑，便于小伙伴们二次开发 Merge PR #141 by theikkila Merge PR #139 by debanjum 😜2023-10-25 v1.3.8 update: link 修复issue #133 📡2023-09-21 v1.3.7 update: link 完善VisRes类在终端情况下的使用 修复auto_text_det的条件错误 🧸2023-09-20 v1.3.6 update: link 添加VisRes类，便于快速可视化结果。详情参见demo.py用法 😀2023-09-20 v1.3.5 update: link Fixed issue #122 ⏰2023-09-18 v1.3.4 update: link 优化更新参数部分的函数实现 🧸2023-09-06 v1.3.2 update: link 修复issue #116 ⭐2023-08-29 v1.3.1 update: link 修复issue #115 🎉2023-08-26 v1.3.0 update: link 将PaddleOCR v4版对应的文本检测和文本识别轻量模型转换为onnx，并打包到whl中。 接口与v1.2.x一致，直接使用即可。 😉2023-07-12 v1.2.12 update: link 在rapidocr_onnxruntime初始化时，添加det_use_cuda、cls_use_cuda、rec_use_cuda参数 兼容配置文件方式传入RapidOCR类中 rapidocr_openvino同理 🎮2023-03-11 v1.2.2 update: link 修复实例化python中RapidOCR类传入参数错误 🧢2023-03-07 v1.2.1 update: link rapidocr系列包更新到v1.2.0 优化python下rapidocr系列包的接口传入参数，支持实例化类时，动态给定各个参数，更加灵活。 如果不指定，则用config.yaml下的默认参数。 具体可参见：传入参数 ⛸2023-02-16 update: link 优化ocrweb部分代码，可直接pip安装，快速使用，详情参见README。 优化python中各个部分的推理代码，更加紧凑，同时易于维护。 🎉2023-01-21 update: link [python] 添加含有文字的图像方向分类模块，具体参见Rapid Orientation ⚽2022-12-19 update: link [python] 添加表格结构还原模块，具体参见Rapid Table 🤖2022-12-14 update: link [python] 将配置参数和模型移到模块里面，同时将模型打到whl包内，可以直接pip安装使用，更加方便快捷。 详情参见：README 🧻2022-11-20 update: link [python] 添加版面分析部分,支持中文、英文和表格三种版面的检测分析。详情参见:Rapid Structure部分。 🎃2022-11-01 update: link 添加Hugging Face Demo, 增加可以调节超参数的功能，详情可访问Hugging Face Demo 🚩2022-10-01 udpate: link 修复python部分下一些较小bugs merge来自AutumnSun1996的OCRWeb实现的多语言部署demo，详情参见：ocrweb_mutli-README 添加onnxruntime-gpu推理速度较慢于CPU的问题说明，详情参见：onnxruntime-gpu版相关说明 🛴2022-09-01 update: link 由于openvino发布了2022.2.0.dev20220829版本，该版本解决了cls部分模型推理的问题。至此，基于openvino的rapidocr完成了统一，全部由openvino推理引擎完成。 详细使用方法参见：python/README 🧸2022-08-17 update: link python/ocrweb部分 v1.1.0发布，详情参见v1.1.0 🕶2022-08-14 update: link ocrweb部分增加以API方式部署调用的功能，可以通过发送POST请求，来获得OCR识别结果。 详情参见：API方式调用 ✨2022-07-07 update: link 修复python版中v3 rec推理bug，并将v3 rec与v2 rec合并为同一套推理代码，更加简洁和方便 添加python模块下的单元测试 该页面添加致谢模块，感谢为这个项目作出贡献的小伙伴。 😁2022-07-05 update: link 添加对单行文本的处理能力，对于单行文本，可自行设定阈值，不过检测模块，直接识别即可。详情参见README 优化python部分代码逻辑，更优雅简洁。 🏝2022-06-30 update: link python推理部分，增加参数选择使用GPU推理的配置选项，在正确安装onnxruntime-gpu版本前提下，可以一键使用（Fix issue#30） 具体基于GPU的推理情况，需要等我后续整理一下，再更新出来 详情参见：onnxruntime-gpu版推理配置 📌2022-06-25 update: link 重新整理python部分推理代码，将常用调节参数全部放到yaml文件中，便于调节，更加容易使用 详情参见：README 🍿2022-05-15 udpate: link 增加PaddleOCR v3 rec模型转换后的ONNX模型，直接去网盘下载替换即可。(百度网盘 | Google Drive) 增加文本识别模型各个版本效果对比表格，详情点击各个版本ONNX模型效果对比。v3的文本识别模型从自己构建测试集上的指标来看不如之前的好。 😀2022-05-12 upadte link 增加PaddleOCR v3 det模型转换的ONNX模型，直接去网盘下载，替换即可。(百度网盘 | Google Drive) 增加各个版本文本检测模型效果对比表格，详情点击各个版本ONNX模型效果对比。v3的文本检测模型从指标来看是好于之前的v2的，推荐使用。 🎧2022-04-04 udpate: link 增加python下的基于OpenVINO推理引擎的支持 给出OpenVINO和ONNXRuntime的性能对比表格 详情参见:python/README 2022-02-24 udpate: link 优化python目录下的推理代码 添加调用不同语言模型的推理代码示例 详情参见：python/onnxruntime_infer/README 2021-12-18 udpate: link 添加Google Colab Demo 2021-11-28 udpate: link 更新ocrweb部分 添加显示各个阶段处理时间 更新说明文档 更换文本检测模型为ch_PP-OCRv2_det_infer.onnx,推理更快，更准 2021-11-13 udpate: link 添加python版本中文本检测和识别可调节的超参数，主要有box_thresh|unclip_ratio|text_score，详情见参数调节 将文本识别中字典位置以参数方式给出，便于灵活配置，详情见keys_path 2021-10-27 udpate: link 添加使用onnxruntime-gpu版推理的代码（不过gpu版本的onnxruntime不太好用，按照官方教程配置，感觉没有调用起来GPU） 具体使用步骤参见: onnxruntime-gpu推理配置 2021-09-13 udpate: link 添加基于python的whl文件，便于使用，详情参见release/python_sdk 2021-09-11 udpate: link 添加PP-OCRv2新增模型onnx版本 使用方法推理代码不变，直接替换对应模型即可。 经过在自有测试集上评测： PP-OCRv2检测模型效果有大幅度提升，模型大小没变。 PP-OCRv2识别模型效果无明显提升，模型大小增加了3.58M。 模型上传到百度网盘 提取码：30jv 2021-08-07 udpate: link PP-Structure 表格结构和cell坐标预测 正在整理中 之前做的,未完成的，欢迎提PR 打Dokcer镜像 尝试onnxruntime-gpu推理 2021-07-17 udpate: link 完善README文档 增加英文、数字识别onnx模型，具体参见python/en_number_ppocr_mobile_v2_rec，用法同其他 整理一下模型转onnx 2021-07-04 udpate: link 目前仓库下的python程序已经可以在树莓派4B上，成功运行，详细信息请进群，询问群主 更新整体结构图，添加树莓派的支持 2021-06-20 udpate: link 优化ocrweb中识别结果显示，同时添加识别动图演示 更新datasets目录，添加一些常用数据库链接(搬运一下^-^) 更新FAQ 2021-06-10 udpate: link 添加server版文本识别模型，详情见提取码：30jv 2021-06-08 udpate: link 整理仓库，统一模型下载路径 完善相关说明文档 2021-03-24 udpate: link 新模型已经完全兼容ONNXRuntime 1.7 或更高版本。 特别感谢：@Channingss 新版onnxruntime比1.6.0 性能提升40%以上。 "
            }
        );
    index.add(
            {
                id:  45 ,
                href: "\/RapidOCRDocs\/docs\/changelog\/rapidocr_paddle\/",
                title: "rapidocr_paddle",
                description: "2023-10-25 v1.3.10 update: link修复issue #133\n2023-10-23 v1.3.9 update: link首次适配PaddlePaddle框架，作为GPU端推理引擎",
                content: "2023-10-25 v1.3.10 update: link修复issue #133\n2023-10-23 v1.3.9 update: link首次适配PaddlePaddle框架，作为GPU端推理引擎\n"
            }
        );
    index.add(
            {
                id:  46 ,
                href: "\/RapidOCRDocs\/docs\/changelog\/rapidocr_web\/",
                title: "rapidocr_web",
                description: " ❤2023-05-20 ocrweb update: link 增加桌面版RapidOCRWeb，详情可参见RapidOCRWeb桌面版使用教程 对仓库文档做了整理，大部分文档放到了Wiki 🌹2023-05-14 ocrweb v0.1.5 update: link 增加界面版返回坐标框的返回值(issue #85) API模式增加base64格式传入 详情参见：link 🏸2023-04-16 ocrweb v0.1.1 update: link API部署改为FastAPI库支持 将API模式与Web解耦合，可通过pip install rapidocr_web[api]来选择性安装 详情参见：link ",
                content: " ❤2023-05-20 ocrweb update: link 增加桌面版RapidOCRWeb，详情可参见RapidOCRWeb桌面版使用教程 对仓库文档做了整理，大部分文档放到了Wiki 🌹2023-05-14 ocrweb v0.1.5 update: link 增加界面版返回坐标框的返回值(issue #85) API模式增加base64格式传入 详情参见：link 🏸2023-04-16 ocrweb v0.1.1 update: link API部署改为FastAPI库支持 将API模式与Web解耦合，可通过pip install rapidocr_web[api]来选择性安装 详情参见：link "
            }
        );
    index.add(
            {
                id:  47 ,
                href: "\/RapidOCRDocs\/docs\/changelog\/rapidocr_api\/",
                title: "rapidocr_api",
                description: " 🍜2023-05-22 api update: link 将API从ocrweb中解耦出来，作为单独模块维护，详情参见API rapidocr_web\u003e0.1.6之后，将不支持pip install rapidocr_web[api]方式安装，可直接pip install rapidocr_api安装使用。 ",
                content: " 🍜2023-05-22 api update: link 将API从ocrweb中解耦出来，作为单独模块维护，详情参见API rapidocr_web\u003e0.1.6之后，将不支持pip install rapidocr_web[api]方式安装，可直接pip install rapidocr_api安装使用。 "
            }
        );
    search.addEventListener('input', show_results, true);

    function show_results(){
        const maxResult =  5 ;
        const minlength =  1 ;
        var searchQuery = sanitizeHTML(this.value);
        var results = index.search(searchQuery, {limit: maxResult, enrich: true});

        
        const flatResults = new Map(); 
        for (const result of results.flatMap(r => r.result)) {
        if (flatResults.has(result.doc.href)) continue;
        flatResults.set(result.doc.href, result.doc);
        }

        suggestions.innerHTML = "";
        suggestions.classList.remove('d-none');

        
        if (searchQuery.length < minlength) {
            const minCharMessage = document.createElement('div')
            minCharMessage.innerHTML = `Please type at least <strong>${minlength}</strong> characters`
            minCharMessage.classList.add("suggestion__no-results");
            suggestions.appendChild(minCharMessage);
            return;
        } else {
            
            if (flatResults.size === 0 && searchQuery) {
                const noResultsMessage = document.createElement('div')
                noResultsMessage.innerHTML = "No results for" + ` "<strong>${searchQuery}</strong>"`
                noResultsMessage.classList.add("suggestion__no-results");
                suggestions.appendChild(noResultsMessage);
                return;
            }
        }

        
        for(const [href, doc] of flatResults) {
            const entry = document.createElement('div');
            suggestions.appendChild(entry);

            const a = document.createElement('a');
            a.href = href;
            entry.appendChild(a);

            const title = document.createElement('span');
            title.textContent = doc.title;
            title.classList.add("suggestion__title");
            a.appendChild(title);

            const description = document.createElement('span');
            description.textContent = doc.description;
            description.classList.add("suggestion__description");
            a.appendChild(description);

            suggestions.appendChild(entry);

            if(suggestions.childElementCount == maxResult) break;
        }
    }
    }());
</script>
        
    </body>
</html>